[英]Multiple LEFT OUTER JOIN on multiple tables
I would like to convert the following Oracle SQL query syntax (Use LEFT OUTER JOIN
instead of (+)
): 我想转换以下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
Here is what I tried so far: 这是我到目前为止尝试的内容:
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;
But I get the error : 但我得到错误:
"ORA-00904: "B"."X" : invalid identifier" “ORA-00904:”B“。”X“:无效的标识符”
The join
on D
is an inner join, the rest are left outer joins: 在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;
I always start chains of joins with inner joins followed by the left outer join
. 我总是从内连接开始连接链,然后是left outer join
。 I never use right join
, and full join
rather rarely. 我从不使用right join
,而且很少使用full join
。 The inner joins define the rows in the result set, so they come first. 内部联接定义结果集中的行,因此它们首先出现。
You don't should mix explicit and implicit sintax 你不应该混合使用显式和隐式sintax
SELECT *
FROM TABLEA A
INNER JOIN TABLEL L ON L.Z = A.Z
LEFT OUTER JOIN TABLEB B ON A.X = B.X
LEFT OUTER JOIN TABLEC C ON B.Y = C.Y
WHERE A.MY_COL = @col_val
you should use inner join (or join) for TABLEL 你应该使用TABLEL的内连接(或连接)
Try this: 试试这个:
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
TABLEB
和TABLEC
进入LEFT OUTER JOIN
(你使用过+),而TABLED
进入INNER JOIN
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.