简体   繁体   English

多个表上的多个LEFT OUTER JOIN

[英]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: 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;

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 TABLEBTABLEC进入LEFT OUTER JOIN (你使用过+),而TABLED进入INNER JOIN

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM