2015-09-24 69 views
0

我有一個LoggedDischarges表和ActualDischarges的另一個表。根據三個條件創建表1減去表2

我想生成一個查詢,會給我所有的ActualDischarges排除基於AgencyID,計劃和ActivityEndDate

那些已經在LoggedDischarges客戶端可以在多個程序並在多個排放領域同一天。我需要確保從每個程序中獲得LoggedDischarges。

這是我有,但不知道如何添加其他條件。

select * from ActualDischarges 
    where (agencychildid) not in 
      (select agencyid from LoggedDischarges) 

謝謝

史蒂夫·哈撒韋

+0

LEFT JOIN和過濾由空會給出想要的結果.. –

+1

你使用了哪個數據庫?請添加相關標籤。 – sstan

回答

2

即使你的DBMS支持像

where (AgencyID, Program, ActivityEndDate) not in 
    (select AgencyID, Program, ActivityEndDate 
    from ...) 

你更好地開關子查詢到NOT EXISTS(任何空值的情況下)多列:

select * from ActualDischarges as aD 
where NOT EXISTS 
    (select * from LoggedDischarges as lD 
    where aD.AgencyID = lD.AgencyID 
     and aD.Program = lD. Program 
     and aD.ActivityEndDate= lD.ActivityEndDate) 
+0

謝謝,這是我需要的。我試圖在錯誤的地方做And。 –

1

對於這種類型的比賽,我會建議LEFT JOIN與在年底NULL來確定第二表沒有記錄:

SELECT a.* 
FROM ActualDischarges AS a 
LEFT JOIN LoggedDischarges AS l 
ON agencyid=agencychildid 
AND a.program=l.program 
AND a.ActivityEndDate=l.ActivityEndDate 
WHERE l.agencyid IS NULL 

作爲一個側面說明,絕對是你最終排除記錄其匹配d避免使用多個陳述了這樣的情況下NOT IN(...)而不是在(...)等。記錄中的不同記錄出於不同的原因,這很少是期望的結果。

+0

謝謝你,我也會嘗試這種方法。 –

相關問題