Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL查询(左外部联接)_Sql_Oracle - Fatal编程技术网

Oracle SQL查询(左外部联接)

Oracle SQL查询(左外部联接),sql,oracle,Sql,Oracle,我有五张表,我想从中得到结果。以下是我正在做的: 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 Em

我有五张表,我想从中得到结果。以下是我正在做的:

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; 选择 person.SERVICE\u NO作为SERVICE\u NO,person.CNIC\u NO作为CNIC,person.NAME作为NAME,card.CPLC\u SERIAL\u NO作为卡号, child_dc.NAME作为child_dc,root_dc.NAME作为root_dc,person.OU作为OU,person.EMAIL作为EMAIL 从…起 人,卡,人卡,子卡,根卡 哪里 person\u card.person\u ID=person.ID 和 人员卡。卡片卡=卡片卡 和 person.CHILD\u DC\u ID=CHILD\u DC.ID 和 root_dc.ID=子_dc.ID;
这个查询提供了冗余值(如果我在其中放置了一个distinct,则不会)。我在考虑用“被忽略的加入”来做这件事;这意味着我将被留下来与5个表连接。我该怎么做呢。如果有人有更优化的查询或其他想法,那就太好了。

查询更新:

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,那就太乱了。您将如何使用我的查询对查询进行优化分级,因为两者都给出相同的结果。如果您检查执行速度,我的查询将比您的查询快,因为我正在指定联接,并且您需要distinct关键字来输出distinctvalues@ShahJee有关详细信息,您可以查看以下链接:。另外,由于我在
child\u dc
root\u dc
上使用了
左连接
,因此当它在
child\u dc
root\u dc
中遇到空值时,它将产生不同的值