2016-05-16 61 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)