【问题标题】:Oracle joining multiple tables?Oracle加入多个表?
【发布时间】:2014-04-10 02:03:14
【问题描述】:

我正在尝试执行以下操作

  select
   TA.C1 ,TB.C1 ,TC.C1
   from  TableA TA ,TableB TB , TableC TC  
   where TA.C1 = "ABC"
   AND TA.C2 = TB.C1
   and TA.C3 = TC.C1

结果是

我的目标是在这个查询中添加更多的表

  select
   TA.C1,TB.C1,TC.C1,TD.C1,TE.C1
   from  TableA TA ,TableB TB , TableC TC , TableD TD, TableE TE
   where TA.C1 = "ABC"
   and TA.C2 = TB.C1
   and TA.C3 = TC.C1
   and TA.C4 = TD.C1
   and TD.C2 = TE.C1

但由于列 TD.C1 包含空值,而 TA.C4 总是有一些值,我得到以下结果。

预期结果是

我尝试使用 Joins 加入 4 个表:

select
     TA.C1,TB.C1,TC.C1,TD.C1
     from  TableA TA          
     JOIN TableB TB ON (TA.C2 = TB.C1)
     JOIN TableC TC ON (TA.C3 = TC.C1)
     LEFT JOIN TableD TD ON (TA.C4 = TD.C1)
     AND TA.C1 = "ABC"

结果非常接近我的预期:

问题是我不确定如何加入第 5 个表(表 E),因为它与表 A 没有任何连接。

【问题讨论】:

  • E可以加入哪些表?
  • 我不明白你的问题。您确实需要从AE直接链接。您只需要一个从AEpath。显然你有它:A->D->E.
  • @WillNewton TableE 可以加入 TableD (TD.C2 = TE.C1)
  • @PM77-1 伙计,我不确定如何加入 D 和 E(我知道 coomand TD.C2 = TE.C1 ),但不确定如何将其放入查询中
  • 我有点困惑。如果TA.C3 = "ABC"TC.C1 也应该等于“ABC”。那么你如何获得结果集中的其他行呢?还是我错过了什么?

标签: sql oracle join


【解决方案1】:

你可以只包含表E和表D的另一个左连接。基本上,表D和E之间存在关系,输入的数据必须符合它。如果没有数据,则关系仍然存在,因此连接将根据需要返回空值。

 select
 TA.C1,TB.C1,TC.C1,TD.C1, TE.C1
 from  TableA TA          
 INNER JOIN TableB TB ON (TA.C2 = TB.C1)
 INNER JOIN TableC TC ON (TA.C3 = TC.C1)
 LEFT JOIN TableD TD ON (TA.C4 = TD.C1)
 LEFT JOIN TableE TE ON (TD.C2 = TE.C1)
 AND TA.C3 = "ABC"

【讨论】:

    【解决方案2】:

    最佳实践:在后面的示例中使用显式连接。

    当连接多个表时,连接不需要都从同一个表开始,每个表都必须简单相关。那就是你可以

    select * 
      from            a 
           inner join b on a.id = b.id_a 
           inner join c on b.id = c.id_b
    

    【讨论】:

      猜你喜欢
      • 2015-03-17
      • 2021-04-01
      • 1970-01-01
      • 2018-02-24
      • 2020-11-14
      • 1970-01-01
      • 2018-04-29
      • 2015-08-31
      相关资源
      最近更新 更多