2016-05-16 59 views
-2

我有點難以找到明確的答案。 我有兩個完全相同的列表,可以說t1 & t2。 我想添加到t1從t2的所有行,但消除最後的t1中的重複。2個表沒有重複的聯合

我可以使用SELECT INTO,但這會讓我看到我所瞭解的重複項。目前我使用簡單的UNION(消除重複)到一個新的表t3中,但是這使得一切都有點麻煩,因爲我需要保留t1中的所有行到最後(所以我做了「DROP TABLE t1並將t3重命名爲T1" )。但我在想,有一個更好的方法來做到這一點,也許有一個JOINS?

+0

我並不需要它來訂購 – littlerunaway

+0

但我需要的結果保存在一個表,不只是返回聯合查詢的結果 – littlerunaway

+0

樣本數據和期望的結果將澄清問題。重複意味着什麼?如果沒有其他信息,人們會假設所有列。因此,'聯盟'將是一個正確的方法。 –

回答

1

只是做一個INSERT其中的值不會在第一個表已經存在:

Insert Into T1 (Col1, Col2, ...) 
Select T2.Col1, T2.Col2, ... 
From T2 
Where Not Exists 
(
    Select * 
    From T1 
    Where (T1.Col1 = T2.Col1 Or (T1.Col1 Is Null And T2.Col1 Is Null)) 
    And  (T1.Col2 = T2.Col2 Or (T1.Col2 Is Null And T2.Col2 Is Null)) 
    And  ... 
) 
+0

@ lad2025關於'NULL'的公平點,但我不太確定第二點。從這個問題來看:'我想從t2中增加所有的行,但是在最後的t1中刪除重複的數據。'我想,所有他想做的事情就是從't2'到't1'插入新記錄而不復制行。 – Siyual

+0

是的,這正是我需要的 – littlerunaway

+0

更新了數據中的'NULL'條件。 – Siyual

0
INSERT INTO T1 (column1, column2, column3,...columnN) 
(SELECT column1, column2, column3,...columnN FROM T2 
EXCEPT 
SELECT column1, column2, column3,...columnN FROM T1)