2017-08-31 33 views
-3

我有表1從我需要採取和廣告參見表2只行這是不是在表2MS SQL不存在的地方多列

Table 1 
ID Name N T 
A Bob 33 Y 
B Eva 44 N 
C John 47 Y 
B Alex 44 N 
D Bob 47 Y 

Table 2 
ID Name N T 
A Bob 34 Y 
B Alex 44 N 
D Bob 47 Y 

我嘗試建立這種類型的版本劇本,但我的獲得整個表的口是心非1 +新行

INSERT INTO TABLE_2 
    (ID , Name , N , T) 
SELECT table1.ID, table1.Name, table1.N, table1.T 
FROM TABLE_1 table1 
WHERE NOT EXISTS(SELECT 1 
       FROM TABLE_2 table2 
       WHERE (table2.ID = table1.ID) and (table2.Name = table1.Name) and (table2.N = table1.N)AND (table2.T = table1.T)) 

期待結果

A Bob 34 Y 
B Alex 44 N 
D Bob 47 Y 
A Bob 33 Y 
B Eva 44 N 
C John 47 Y 
+0

我已經測試你的腳本和它的作品:http://sqlfiddle.com/#!6/261ff/5/1感謝浪費我的時間 –

+0

閱讀關於EXCEPT。沒有它的SQL(或MINUS)可以使用LEFT JOIN方式。 – philipxy

回答

0

一個辦法是到INSERT INTO ... SELECT與一個選擇查詢標識table1中的所有記錄,這些記錄不完全匹配table2中的某條記錄。

INSERT INTO table2 (ID, Name, N, T) 
SELECT t1.ID, t1.Name, t1.N, t1.T 
FROM table1 t1 
LEFT JOIN table2 t2 
    ON t1.ID = t2.ID AND 
     t1.Name = t2.Name AND 
     t1.N = t2.N AND 
     t1.T = t2.T 
WHERE t2.ID IS NULL 

請注意,這裏的邏輯是,如果連一個在table1給定記錄的列是不是在協議具有一定的紀錄table2,那麼連接會失敗,然後所有table2列會拿出NULL在結果集中。 WHERE子句僅限於table1中的此類不匹配記錄。

0

您可以通過左連接來連接兩個表。

必須插入Table_1中與Table_2不匹配的所有記錄。要檢查記錄沒有比賽,你可以簡單地使用T2.ID IS NULL

INSERT INTO TABLE_2 (ID , Name , N , T) 
     SELECT T1.ID 
      ,T1.Name 
      ,T1.N 
      ,T1.T 
     FROM TABLE_1 T1 
    LEFT JOIN TABLE_2 T2 
      ON T1.ID = T2.ID 
     AND T1.Name = T2.Name 
     AND T1.N  = T2.N 
     AND T1.T  = T2.T 
     WHERE T2.ID IS NULL 
0
declare @Table1 table (ID varchar(100), Name varchar(100), N int, T varchar(100)); 
insert into @Table1 values 
('A', 'Bob', 33, 'Y'), 
('B', 'Eva', 44, 'N'), 
('C', 'John', 47, 'Y'), 
('B', 'Alex', 44, 'N'), 
('D', 'Bob', 47, 'Y') 

declare @Table2 table (ID varchar(100), Name varchar(100), N int, T varchar(100)); 
insert into @Table2 values 
('A', 'Bob', 34, 'Y'), 
('B', 'Alex', 44, 'N'), 
('D', 'Bob', 47, 'Y') 

insert into @Table2 
select * 
from @Table1 t1 
where not exists (select * 
        from @Table2 t2 
        where t2.ID = t1.ID and t2.N= t1.N and t2.Name = t1.Name and t1.T = t2.T);