无法选择我在 join-on 语句中使用的列

问题描述 投票:0回答:1

我正在修改一个 SQL 查询,因此它将与数据库无关(因此也可以在 SQL Server 中工作)。这意味着我已将 join-using 替换为 join-on。这有效,但是当我将该子查询放回其父查询时,出现错误。

我在

ORA-00904: study_event_id: invalid identifier
SELECT
语句中使用的列的
ON
上出现
JOIN
错误。

下面的代码在出现错误的地方被精简到最少,因此需要尽可能保留子查询和别名。

SELECT
    study_event_id
FROM
    (
        SELECT
            *
        FROM
            (
                SELECT
                    ea.*,
                    sbj.subject_id
                FROM
                    v_study_event ea,
                    v_subject     sbj
            ) lefttable
            LEFT OUTER JOIN (
                SELECT
                    *
                FROM
                    v_subject_current_event_status
            ) righttable ON righttable.study_event_id = lefttable.study_event_id
        
    ) tbl

我可以选择所有其他列,但无法识别我加入的列。

当我选择 * 时,该列确实出现。

我尝试使用上述所有别名来指定它:tbl、lefttable 和 righttable。

我只是不明白为什么不能选择这一列。

在完整查询中,该列被选择了更多,并且 join-on 语句中有两列。另一列也无法选择,但在完整查询中我不需要再选择该列。

sql oracle outer-join ora-00904
1个回答
1
投票
SELECT ea.*,
       sbj.subject_id
FROM   v_study_event ea,
       v_subject     sbj

等同于:

SELECT ea.*,
       sbj.subject_id
FROM   v_study_event ea
       CROSS JOIN v_subject sbj

和:

LEFT OUTER JOIN (
  SELECT *
  FROM   v_subject_current_event_status
) righttable

等同于:

LEFT OUTER JOIN v_subject_current_event_status righttable

并且:

SELECT *
FROM   ( ... ) tbl

不执行任何操作,可以省略。

您的查询可以简化为(尽管不清楚您想要在

SELECT
子句中包含哪些列):

SELECT se.*,
       s.subject_id,
       sces.study_event_id
FROM   v_study_event se
       CROSS JOIN v_subject s
       LEFT OUTER JOIN v_subject_current_event_status sces
       ON sces.study_event_id = se.study_event_id
© www.soinside.com 2019 - 2024. All rights reserved.