sql - 多个表上的多个 LEFT OUTER JOIN

标签 sql oracle

我想转换以下 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" : invalid identifier"

最佳答案

joinD是内连接,其余是左外连接:

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 join , 和 full join比较少。内部联接定义了结果集中的行,因此它们排在最前面。

关于sql - 多个表上的多个 LEFT OUTER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48750345/

相关文章:

mysql - 如何连接三个表以获得总和

sql - Android 无法将数据插入 Azure SQL,但可以插入数据

java - 当我按 ID 获取行时如何修复 'Incorrect result size: expected 1, actual 0'?

sql - DB2 SQL 更新表值

php - 选择多个选项 sql 和 php

sql - oracle sql从行到列

c# - 检查 Oracle.DataAccess 是否存在

c# - Dapper Oracle Number(10,0) 作为 Decimal Parser 错误返回

oracle - 仅在第一次运行语句时引发 NULL 索引表键值错误

oracle - Hibernate 分页或批处理