2017-01-25 34 views
1

我有一個包含所有的客戶爲在零下甲骨文

ACCTID    CUSTID  PATH      CUSTNAME 
9080001380318 20800415729 /web/intsoft/DATA_MIGRATION.tif MAHAO JOHANE 
9080001805335 10800101164 /web/intsoft/DATA_MIGRATION.tif LINDIWE RAQECHE 
9080001380318 10800292271 /web/intsoft/DATA_MIGRATION.tif Mandate 
9080002496026 10800387685 /web/intsoft/DATA_MIGRATION.tif MOEKETSI D. NTOI 
9080003455730 10800618738 /web/intsoft/DATA_MIGRATION.tif Mandate 

表SVS_TEMP有此表沒有主鍵

現在,另一臺是signotherinfo與數據

SIGNID ACCTID   
1093418 9080001380318 
1089652 9080001380318 
1089711 9080001380318 
1089910 9080001380318 
1127222 9080001380318 
1108463 9080001380318 

其中signid是主鍵

我想從SVS_TEMP獲取所有記錄是否噸signotherinfo

+0

這沒有任何意義。沒有「記錄」(在關係數據庫中,我們討論的是「行」而不是記錄)來自SVS_TEMP的是在SIGNOTHERINFO表中,原因很簡單,即使行沒有相同的「字段」(我們稱之爲「列「)。你的意思是什麼 - 來自SVS_TEMP的ACCTID不在第二個表中的所有行? ACCTID可以在SVS_TEMP中爲空嗎? – mathguy

回答

2

不知道更多關於你可能有什麼限制(你提到的無PK),我要說的反連接將是你最好的選擇:

select * 
from SVS_TEMP t 
where not exists (
    select null 
    from sigotherinfo o 
    where t.acctid = o.acctid 
) 

防的主要優勢加入,就像一個半連接(exists)是如果它找到一個匹配,它「停止查找」可以這麼說。

1

外連接兩個表會做你想要什麼:

SELECT s.* 
    FROM SVS_TEMP t 
    LEFT OUTER JOIN SIGNOTHERINFO s 
    ON s.ACCTID = t.ACCTID 
    WHERE s.ACCTID IS NULL; 

它說的是「取中的所有行SVS_TEMP並與SIGNOTHERINFO行其匹配的ACCTID領域,保持加入他們的行列即使在SIGNOTHERINFO中沒有匹配的行,也是來自SVS_TEMP的所有行「。然後WHERE子句說「只保留找不到匹配數據的結果集行」。

祝你好運。