2016-10-28 64 views
0

我不知道,如果下面的代碼是正確的,我只是試圖在另一個表中沒有插入數據,我不知道如果我可以在括號中使用的兩列where ([Event],[Event Start DateTime])插入數據不在另一個表

insert into CPEvents3 select * from CPEvents1 where ([Event],[Event Start DateTime]) not in 
(select [Event], [Event Start DateTime] from CPEvents3) 

感謝,S

+2

OT:如果這是在您的控制之下,我會避免像'[Event Start DateTime]'這樣的列名。在這種特殊情況下,我甚至不確定,如果* DateTime *真的是列名稱的一部分或從聲明中獲取的數據類型......最好是沒有空格的普通名稱。您可能會使用下劃線... – Shnugo

回答

1

這樣,我們需要寫

INSERT INTO CPEVENTS3 
([Event],[Event Start DateTime]) 
select [Event], 
[Event Start DateTime] 
FROM CPEvents1 CP 
where NOT EXISTS 
(
SELECT [Event], [Event Start DateTime] 
from CPEvents3 
WHERE CP.[Event] = [Event]) 

OR

INSERT INTO CPEVENTS3 
([Event], 
[Event Start DateTime] 
) 
select [Event],[Event Start DateTime]FROM CPEvents1 
EXCEPT 
select [Event],[Event Start DateTime]FROM CPEvents3 
+0

對於[事件開始日期時間]'不存在'錯過謂詞' –

+0

到Ivan Starostin:什麼是錯過的存在,整個查詢應該是什麼?謝謝 –

+0

@JoeGreen'EXCEPT'例子很好 –

0

你可以寫這樣也

insert into CPEvents3 
select * from CPEvents1 where 
[Event] not in (select [Event] from CPEvents3) 
and [Event Start DateTime] not in (select [Event Start DateTime] from CPEvents3) 
-1

你不能在比較同時兩列。您需要爲每個列創建這樣的條件:

insert into CPEvents3 
select * from CPEvents1 c1 where 
    [Event] not in (select [Event] from CPEvents3) and 
    [Event Start DateTime] not in (select [Event Start DateTime] from CPEvents3) 

指定插入和選擇列表中的列是一種很好的做法。

+0

這兩個查詢會給出不同的輸出,這兩個例子都會返回錯誤的結果。 –

+0

我更新了我的答案 – Bogdan

0

一種方法是使用outer join來查找出現在一個表中但不出現在另一個表中的那些記錄。這些可以插入。

-- Add new records to CPEvents3. 
INSERT INTO CPEvents3 
    (
     [Event], 
     [Event Start DateTime]  
    ) 
SELECT 
    c1.[Event], 
    c1.[Event Start DateTime] 
FROM 
    CPEvents1 AS c1 
     LEFT OUTER JOIN CPEvents3 AS c3  ON c3.[Event]     = c1.[Event] 
              AND c3.[Event Start DateTime] = c1.[Event Start DateTime] 
WHERE 
    c3.[Event] IS NULL 
; 
0

請嘗試以下查詢它會正常工作

INSERT INTO CPEvents3 
SELECT * 
FROM CPEvents1 LEFT OUTER JOIN CPEvents3 
ON CPEvents3.[Event]= CPEvents1.[Event] 
AND CPEvents3.[Event Start DateTime] = CPEvents1.[Event Start DateTime] 
WHERE CPEvents3.[Event] IS NULL 

選擇在一個表中存儲的數據,並使用比較的一個或多個列,你可以使用左側另一個未發現參與這些列上並設置一個conidtion,其中一個來自第二個表的連接列爲null。因此,查詢只返回在第一個表中找到的數據,而在另一個表中找不到數據。

+0

儘管這段代碼可能有助於解決問題,但它並不能解釋爲什麼和/或它如何回答問題。提供這種附加背景將顯着提高其長期價值。請編輯您的答案以添加解釋,包括適用的限制和假設。 – jmattheis

相關問題