我必须做一个:
INSERT INTO aaa(DateFrom, DateTo)
SELECT DateFrom, DateTo FROM bbb
但有时这个日期间隔已经存在于aaa
中如何将WHERE添加到SELECT中,如果该日期间隔已存在则不插入aaa
我的问题是:如果我添加如下内容:
WHERE bbb.DateFrom NOT IN aaa.DateFrom AND bbb.DateTo NOT IN aaa.DateTo
这不会检查两个日期(间隔),而是检查“发件人”或“收件人”日期
答案 0 :(得分:1)
你的插页很好,
INSERT INTO @aaa(DateFrom,DateTo) SELECT b.DateFrom,b.DateTo FROM @bbb B'/ P>
您需要摆脱现有的WHERE子句并改为执行LEFT JOIN。
LEFT JOIN @aaa a ON a.DateFrom = b.DateFrom AND a.DateTo = b.DateTo
然后,您可以将其与新的WHERE子句结合使用,以测试第二个表中是否缺少条目:
WHERE ISNULL(a.DateFrom,'')=''
瞧,你有疑问!
下面的完整工作示例:
DECLARE @aaa TABLE(DateFrom datetime,DateTo datetime)
INSERT INTO @aaa(DateFrom,DateTo) 价值观('2011年1月1日','2011年1月31日') INSERT INTO @aaa(DateFrom,DateTo) 价值观('2011年3月1日','2011年3月15日')
SELECT * FROM @aaa
DECLARE @bbb TABLE(DateFrom datetime,DateTo datetime)
INSERT INTO @bbb(DateFrom,DateTo) 价值观('2011年1月1日','2011年1月31日') INSERT INTO @bbb(DateFrom,DateTo) 价值观('2011年3月1日','2011年3月16日') INSERT INTO @bbb(DateFrom,DateTo) 价值观('2011年2月1日','2011年6月3日')
SELECT * FROM @bbb
INSERT INTO @aaa(DateFrom,DateTo) SELECT b.DateFrom,b.DateTo FROM @bbb b LEFT JOIN @aaa a ON a.DateFrom = b.DateFrom AND a.DateTo = b.DateTo 在哪里ISNULL(a.DateFrom,'')=''
SELECT * FROM @aaa
答案 1 :(得分:0)
看起来您需要做的就是将“AND”更改为“OR”并添加嵌套的select语句。
WHERE bbb.DateFrom NOT IN (select aaa.DateFrom from aaa) AND bbb.DateTo NOT IN (select aaa.DateTo from aaa)