我几乎在下面的查询中有我需要的东西,除了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
中答案 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()
)