2011-12-08 195 views
1

我有五个表,我想从中得到结果。下面是我在做什么:

Oracle SQL查询(左外部连接)

 
select 
     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,person_card,child_dc,root_dc 
where 
     person_card.PERSON_ID = person.ID 
and 
     person_card.CARD_ID = card.ID 
and 
     person.CHILD_DC_ID = child_dc.ID 
and 
     root_dc.ID = child_dc.ID; 

该查询给冗余值,(如果没有我的地方明显与它)。我正在考虑这样做,放弃加入;这意味着我将与5张桌子左外接合。我将如何做到这一点。如果任何人有更优化的查询或任何其他想法,那就太好了。

回答

2

查询更新时间:

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; 
+0

不工作,它缺少一个关键的字。 –

+0

立即尝试。我错过了关键字 – reggie

+0

只是注意到,你忘了放在最后一行,而且,如果我没有放置不同,它的一团糟。您如何按照我的查询优化您的查询,因为两者的结果都是一样的。 –