我有这个查询,在这行查询中我得到“ORA-00904: "RA"."TARGETRESOURCEID": invalid identifier':
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;
谁能确定问题所在,因为我找不到问题所在。
最佳答案
问题是来自外部查询的列只能在下一级子查询中访问。您正在尝试访问许多子查询级别下的外部查询列,因此您收到了该错误消息。
为避免错误,您需要重写查询,使您的子查询只有一层深 - 像这样(注意,未经测试,因为您没有提供任何示例数据等):
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
?
关于database - Oracle 11g 查询中的标识符无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56167026/