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_dc
和root_dc
上使用left join
,因此当遇到child_dc
和root_dc
中的空值时,它将产生与您的查询不同的值以上是关于Oracle SQL 查询(左外连接)的主要内容,如果未能解决你的问题,请参考以下文章