2011-04-12 62 views
1

我必須做出一個:SQL:杜佩檢查使用多列

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 

這不會檢查兩個日期(間隔),但要麼「從」或「到」日期

回答

1

你的插入是好的,

INSERT INTO @aaa(DateFrom,dateTo)方法 SELECT b.DateFrom,b.DateTo FROM @bbb b

您需要擺脫現有的WHERE子句並執行LEFT JOIN。

LEFT JOIN @aaa一個ON a.DateFrom = b.DateFrom AND a.DateTo = b.DateTo

您可以再與新的結合這個WHERE子句來測試缺乏項第二個表:

WHERE ISNULL(a.DateFrom, '')= ''

瞧你有你的查詢!

整個例子如下:

DECLARE @aaa TABLE(DateFrom 日期時間,日期時間DateTo)

INSERT INTO @aaa(DateFrom,dateTo)方法 VALUES(2011' 年01月,」 2011年1月31 ') INSERT INTO @aaa(DateFrom,dateTo)方法 VALUES('01 2011年3月', '2011 3月15日')

SELECT * FROM @aaa

DECLARE @bbb TABLE(DateFrom 日期時間,日期時間DateTo)

INSERT INTO @bbb(DateFrom,dateTo)方法 VALUES('01 2011' 年1月, '2011年1月31') INSERT INTO @bbb(DateFrom, dateTo)方法 VALUES('01 2011' 年3月, '2011年3月16日') INSERT INTO @bbb(DateFrom,dateTo)方法 VALUES('01 2011' 年2月, '2011年6月3日')

SELECT * FROM @ bbb

INSERT INTO @aaa(DateFrom,DateTo) SELECT b.DateFrom,b.DateTo FROM @bbb b LEFT JOIN @aaa一個ON a.DateFrom = b.DateFrom AND a.DateTo = b.DateTo WHERE ISNULL(a.DateFrom, '')= ''

SELECT * FROM @aaa

0

看起來你需要做的就是將你的「AND」改爲「OR」並添加嵌套的select語句。

WHERE bbb.DateFrom NOT IN (select aaa.DateFrom from aaa) AND bbb.DateTo NOT IN (select aaa.DateTo from aaa) 
+0

這不是檢查間隔,如果有一個記錄具有相同的DateFrom和不同的DatTo ...請參閱我的意思? – Ash 2011-04-12 12:42:07

+0

不要以爲我知道你的問題......我不知道我現在做甚麼。很高興你找到你的答案。 – Jody 2011-04-12 20:21:47