[英]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.