SQL查询存在的记录除外

时间:2013-10-19 13:56:41

标签: sql

我几乎在下面的查询中有我需要的东西,除了table3中还有另一个enddate_column我要添加到查询中。现在,如果cardid位于table3中它忽略了table1和table2不相等的位置,那么它的效果很好。但是我需要允许查询返回结果,即使table3包含匹配的记录,只要enddate_column小于today

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位于table3中,enddate大于今天。

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

这应该返回cardid 10005的结果,因为该表不存在于table3

1 个答案:

答案 0 :(得分:0)

我想你想要这样的东西;左外连接到Table3,并通过使用伪造的昨日日期合并日期字段来处理空行的缺失行测试。

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()
    )