Oracle SQL 查询(左外连接)

Posted

技术标签:

【中文标题】Oracle SQL 查询(左外连接)【英文标题】:Oracle SQL Query (LEFT OUTER JOIN) 【发布时间】:2011-12-08 19:22:42 【问题描述】:

我有五张桌子,我想从中得到结果。这是我正在做的事情:

选择 person.SERVICE_NO 作为 Service_No,person.CNIC_NO 作为 CNIC,person.NAME 作为 NAME,card.CPLC_SERIAL_NO 作为 Card_Number, child_dc.NAME 作为 Child_DC,root_dc.NAME 作为 Root_DC,person.OU 作为 OU,person.EMAIL 作为电子邮件 从 人,卡,person_card,child_dc,root_dc 在哪里 person_card.PERSON_ID = 人.ID 和 person_card.CARD_ID = card.ID 和 person.CHILD_DC_ID = child_dc.ID 和 root_dc.ID = child_dc.ID;

这个查询给出了冗余值,(如果我用它放置一个不同的值,则不会)。我正在考虑用左连接来做这件事;这意味着我将与 5 个表进行 LEFT OUTER JOINING。我该怎么做。如果有人有更优化的查询或任何其他想法,那就太好了。

【问题讨论】:

【参考方案1】:

查询更新:

select  distinct
    person.SERVICE_NO as Service_No, 
    person.CNIC_NO as CNIC, person.NAME as NAME , 
    card.CPLC_SERIAL_NO as Card_Number,
    child_dc.NAME as Child_DC, 
    root_dc.NAME as Root_DC, person.OU as OU, 
    person.EMAIL as Email
from

     person_card inner join person
     on person_card.PERSON_ID = person.ID
     inner join card
     on person_card.CARD_ID = card.ID
        left outer join child_dc 
     on person.CHILD_DC_ID = child_dc.ID
        left outer join root_dc
    on child_dc.ID = root_dc.ID;

【讨论】:

立即尝试。我错过了 on 关键字 刚刚注意到您忘记在最后一行放置 on,而且,如果我不放置不同的地方,那就一团糟。您如何根据我的查询的优化对您的查询进行评分,因为两者都给出相同的结果。 如果你检查执行速度,我的会比你的快,因为我指定了连接,你需要 distinct 关键字来输出不同的值 @ShahJee 欲了解更多信息,您可以查看此链接:***.com/questions/1018822/…。此外,由于我在child_dcroot_dc 上使用left join,因此当遇到child_dcroot_dc 中的空值时,它将产生与您的查询不同的值

以上是关于Oracle SQL 查询(左外连接)的主要内容,如果未能解决你的问题,请参考以下文章

Oracle左外连接问题

如何在 LINQ 中使用左外连接进行 SQL 查询?

sql查询中的左外连接

Oracle 左外连接的一些測试

ORACLE 左外连接问题(有空表?)

SQL 优化左外连接查询