多个表上的多个 LEFT OUTER JOIN

新手上路,请多包涵

我想转换以下 Oracle SQL 查询语法(使用 LEFT OUTER JOIN 而不是 (+) ):

 SELECT      *
FROM        TABLEA A, TABLEB B, TABLEC C, TABLED D
WHERE       MY_COL = @col_val
AND         A.X = B.X(+)
AND         B.Y = C.Y(+)
AND         D.Z=A.Z

这是我到目前为止所尝试的:

 SELECT *
FROM TABLEA A, TABLEB B, TABLEC C, TABLED D
LEFT OUTER JOIN TABLEA A ON A.X = B.X
LEFT OUTER JOIN TABLEC C ON B.Y = C.Y
WHERE MY_COL = @col_val
AND D.Z = A.Z;

但我得到错误:

“ORA-00904: “B”.“X” : 无效标识符”

原文由 Platus 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 501
2 个回答

join 上的 D 是一个内连接,其余的是左外连接:

 SELECT *
FROM TABLEA A JOIN
     TABLED D
     ON D.Z = A.Z LEFT JOIN
     TABLEB B
     ON A.X = B.X LEFT JOIN
     TABLEC C
     ON B.Y = C.Y
WHERE MY_COL = @col_val;

我总是从内部连接开始连接链,然后是 left outer join 。我从不使用 right joinfull join 很少。内连接定义了结果集中的行,所以它们排在第一位。

原文由 Gordon Linoff 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试这个:

 SELECT *
FROM TABLEA A
LEFT OUTER JOIN TABLEB B ON A.X = B.X
LEFT OUTER JOIN TABLEC C ON B.Y = C.Y
INNER JOIN TABLED D ON D.Z = A.Z
WHERE MY_COL = @col_val

TABLEB and TABLEC goes in LEFT OUTER JOIN (you have used +), instead TABLED goes in INNER JOIN

原文由 Joe Taras 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Stack Overflow 翻译
子站问答
访问
宣传栏