2015-10-15 98 views
1

我有兩個完全相同的表。表A具有例如100行,表B有60行。現在我想從插入表A「失蹤」行到表B. 要找到我會用不同的行:將表A和表B之間的不同行插入表B

select * from tableA where language = 4 
union 
select * from tableB where language = 4 

如何正確使用此代碼與「INSERT INTO」語句? 我的想法:

Insert into tableB 
(Select * from tableA where language = 4 
union 
select * from tableB where language = 4) 

問候

+1

您是否嘗試過除外? – jarlh

+0

你有兩張桌子的身份嗎? – Japongskie

+0

爲什麼不使用合併? – User2012384

回答

0
Insert into tableB 
(Select * from tableA where language = 4 
EXCEPT 
select * from tableB where language = 4) 

也許EXCEPT ALL使用,應把重複不同。

2

UNION可能是一個選項,但它會導致重複。我寧願MINUS操作。

insert into tableB (
select * from tableA where language=4 
MINUS 
select * from tableB where language=4) 
+0

以我的學習..聯盟消除重複... –

+0

聯盟消除重複是的。但使用聯合代碼,您將選擇A和B中的所有100行,並且您將再次將它們插入到B中。這會導致重複。不是UNION運算符。 我們需要IN A和NOT B的行。解決方案是MINUS操作。 –

0

外部聯接

INSERT INTO TableB (Column1,Column2) 
    SELECT DISTINCT 
    a.Column1 , 
    a.Column2 ... more column 
    FROM TableA AS a 
    LEFT OUTER JOIN TableB AS b ON b.Column1 = a.Column1 
              AND b.Column2 = a.Column2 
    WHERE b.Colum2 IS NULL AND b.Colum1 IS NULL ; 

NOT EXISTS

INSERT INTO TableB (Column1,Column2) 
SELECT a.Column1 , 
    a.Column2... 
FROM Table1 AS a 
WHERE NOT EXISTS (SELECT * 
       FROM Table2 AS b 
       WHERE b.Column1 = a.Column1 
         AND b.Column2= a.Column2); 

除了

INSERT INTO TableB (Column1,Column2) 
SELECT Column1, 
    Column2 
FROM TaBLE1 
EXCEPT 
SELECT Column1, 
    Column2 
FROM #TaBLE2; 
相關問題