database - Oracle 11g 查询中的标识符无效

标签 database oracle11g

我有这个查询,在这行查询中我得到“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/

相关文章:

java - TCP Socket接收和处理多个消息

database - apex 如何从一个应用程序中的链接登录到另一个应用程序?

oracle - Oracle 12c 中的子选择性能不佳

json - JQ -c/--compact-output 无法正常工作? Json解析

android - Android在哪里存储SQLite的数据库版本?

mysql - 具有多个不同标准的 UNION SELECT,其中没有真正的 FK

database - 使用 Web 应用程序处理慢速数据库的策略

oracle - 什么是最轻量级的 oracle 版本?

sql - PL/SQL 分组依据 - ORA-01422 : exact fetch returns more than requested number of rows

bash - SQL*Loader-522 : lfiopn failed for file