2013-10-19 198 views
0

除了我想添加到查詢,我幾乎有我需要在下面的查詢。現在,如果cardid位於table3中,它會很好地工作,它忽略了table1和table2不相等的地方。但只要enddate_column小於today,即使table3包含匹配記錄,我也需要允許查詢返回結果。查詢SQL查詢除了

SELECT * FROM [table1] 
INNER JOIN [table2] ON [table1].MemberNum = [table2].MEMBERNUM 
WHERE [table1].CardID<>[table2].cardid 
AND EXISTS(SELECT * FROM [TABLE3] WHERE [TABLE3].CARDID<>[table1].CardID) 

如何添加該條件。

scenario 1: 
table1.cardid = 10005 table1.membernum = 9 
table2.cardid = 10010 table2.membernum = 9 
table3.cardid = 10005 table3.enddate = '2013-10-15' 

這應返回10005的結果,因爲即使table3.cardid位於table3.endate小於今天

scenario 2: 
table1.cardid = 10005 table1.membernum = 9 
table2.cardid = 10010 table2.membernum = 9 
table3.cardid = 10005 table3.enddate = '2013-10-31' 

因爲CardId中位於表3本不應返回結果和結束日期是更大比今天。

scenario 3: 
table1.cardid = 10005 table1.membernum = 9 
table2.cardid = 10010 table2.membernum = 9 
table3.cardid <>exist table3.enddate <> exist 

因爲ID犯規表3中存在,應返回的CardId中10005結果

+1

一個來自每個表格和預期輸出數據的例子對於理解這個問題會有很大的幫助。它可能是或者在一個查詢部分中,但是從描述中不清楚它的表2或3是否是問題。 – u07ch

+1

加入所有3張桌子怎麼樣? –

+0

@ u07ch我添加了數據問題,我確實試圖在所有三個表上進行內部連接,即使是在table3上的右側連接,仍然可以通過使用enddate <今天的標準 – gbb116

回答

0

我想你想是這樣的;左外連接到表3,並通過合併日期字段和假昨天日期來處理空行的缺失行測試。

SELECT 
    * 
FROM 
    [table1] 

INNER JOIN [table2] 
ON [table1].MemberNum = [table2].MEMBERNUM 

LEFT OUTER JOIN [Table3] 
ON 
    table1.CardID = table3.CardID 

WHERE 
    [table1].CardID<>[table2].cardid 
AND (
    CAST(COALESCE(table3.enddate, DATEADD(dd,-1,GETDATE()) AS DATE) <= GETDATE() 
    ) 
+0

產生結果左側是作爲日期刪除時間 - 不知道你是否在場上01/01/2013 20:20 - 剝離左側的時間將處理該時間。 – u07ch

+0

完美的作品,很好的工作非常感謝。我需要研究聚結,不熟悉那個。此外,我刪除了在我的情況下投的那一列已經是一個日期,但是謝謝你的加入。 – gbb116

+0

coalesce就像是isnull,但是你可以在列表中有很多項目,而isnull被限制爲2。 – u07ch