外部加入超过1个表

时间:2014-04-14 01:40:09

标签: sql oracle join

我在下面有这个联接查询,这让我得到了我正在寻找的结果。

select  TA.ColumnB,TB.ColumnB 
    from TableA TA,TableB TB, TableC TC 
    where
        TA.ColumnA=TB.ColumnA(+)
        and TB.ColumnA = TC.ColumnA(+)
        AND TA.ColumnC = 'ABC'

结果==> 3 Rows

表格如下:

enter image description here enter image description here enter image description here

所需结果:

enter image description here

我想知道是否有办法在JOIN中明确地写出相同而不是(+)符号。由于TableB.ColumnA是where条件的共同点,我可以以某种方式减少代码或以不同方式编写以减少外连接的数量吗?

我试过了 尝试1

 Select 
               TA.ColumnB,TB.ColumnB 
               from  TableA TA
               LEFT JOIN TableB TB ON (TA.ColumnA = TB.ColumnA)
               LEFT JOIN TableC TC ON (TB.ColumnA = TC.ColumnA)
               AND TA.ColumnC = 'ABC'

结果==>行数很多

尝试2

 Select 
               TA.ColumnB,TB.ColumnB 
               from  TableA TA
               LEFT JOIN TableB TB ON (TA.ColumnA = TB.ColumnA)
               JOIN TableC TC ON (TB.ColumnA = TC.ColumnA)
               AND TA.ColumnC = 'ABC'

结果==> 2 rows

2 个答案:

答案 0 :(得分:1)

我的尝试1非常接近解决方案。 where条件解决了该问题。我正在使用而不是可能导致问题的地方

Select 
               TA.ColumnB,TB.ColumnB 
               from  TableA TA
               LEFT JOIN TableB TB ON (TA.ColumnA = TB.ColumnA)
               LEFT JOIN TableC TC ON (TB.ColumnA = TC.ColumnA)
               where TA.ColumnC = 'ABC'

答案 1 :(得分:0)

请你试试

Select TA.ColumnB,TB.ColumnB from 
TableC TC 
LEFT JOIN TableB TB ON (TC.ColumnA = TB.ColumnA)
LEFT JOIN TableA TA ON (TB.ColumnA = TA.ColumnA)