簡體   English   中英

Oracle 11g查詢中的標識符無效

[英]Invalid identifier in Oracle 11g query

我有這個查詢,我得到' ORA-00904:“RA”。“TARGETRESOURCEID”:此查詢行上的“無效標識符 ”:

t2.Id IN (SELECT TaskId FROM ResourceAssignment WHERE TargetResourceId = ra.TargetResourceId)

以下是完整的查詢:

Select ra.TargetResourceId, 
(
  SELECT gn.Name FROM GeoNode gn WHERE gn.Id = 
  (
    SELECT t.StartPointId
    FROM Task t 
    WHERE t.Id = 
    (
      SELECT Id FROM
        (SELECT 
          t2.Id
        From 
          Task t2
        WHERE 
          t2.Id IN (SELECT TaskId FROM ResourceAssignment WHERE TargetResourceId = ra.TargetResourceId)
        ORDER BY 
          t2.StartTime1)
      WHERE rownum = 1 
    )
  ) 
) as DepartureNodeName
FROM 
  ResourceAssignment ra
INNER JOIN 
  Vehicle v ON v.Id = ra.SourceResourceId
INNER JOIN
  Unit u ON v.UnitId = u.Id
GROUP BY
    ra.TargetResourceId;

任何人都可以認出這個問題,因為我無法找到問題。

問題是外部查詢中的列只能訪問一個子查詢級別。 您試圖訪問外部查詢列許多子查詢級別,因此您收到該錯誤消息。

為了避免這個錯誤,你需要重寫查詢,這樣你的子查詢只有一個層次 - 就像這樣(nb未經測試,因為你沒有提供任何樣本數據等):

WITH assignment_info AS (SELECT ra.targetresourceid,
                                (SELECT MIN(t.startpointid) KEEP (dense_rank FIRST ORDER BY t.starttime1) task_startpointid
                                 FROM   task t
                                 WHERE  t.id = ra.targetresourceid) task_startpointid
                         FROM   resourceassignment ra
                         INNER  JOIN vehicle v
                         ON     v.id = ra.sourceresourceid
                         INNER  JOIN unit u
                         ON     v.unitid = u.id)
SELECT ai.targetresourceid,
       (SELECT gn.name
      FROM   geonode gn
      WHERE  gn.id = ai.task_startpointid) departurenodename
FROM   assignment_info;

我沒有包含您的GROUP BY ra.targetresourceid子句,因為沒有聚合,並且您的查詢將因此而失敗。 也許你打算在選擇列表中使用DISTINCT

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM