2013-04-24 186 views
0

我想知道是否有人可以幫助我?SQL將表中的值從一個表複製到另一個表,但將副本移動到另一個表

在我的數據庫中,我有兩個表具有相同的列幷包含相同類型的數據。我的第一張表是我們過去6年來一直保持的表格,並且有數百萬條記錄。我的第二張表是我們從其他地方獲得的,其中包含1億多條記錄。表2中的一些數據可能已經包含在表一中。

我想實現的是將表2中的唯一記錄添加到表1中。

我的PK對於兩個表都是相同的,並且這個列可以確定它是否是重複的。

問題出現了,我需要在過程結束時顯示重複記錄,以便可以檢查這些記錄。

我對SQL有一個很好的基礎知識,但沒有達到這個目標。 如果任何人能夠協助它,將不勝感激。

+0

'insert into one(...)select ... from two t where where exists(select * from one x where x.id = t.id)' – wildplasser 2013-04-24 11:35:57

回答

0

請嘗試:

INSERT INTO Table1 
SELECT DISTINCT * FROM Table1 
WHERE PrimaryKeyColumn NOT IN (SELECT PrimaryKeyColumn from Table1) 
0

事情是這樣的:

-- store the duplicates 
SELECT t2.id 
INTO #tempTable 
FROM table2 t2 
JOIN table1 t1 ON t1.id = t2.id 

-- insert the non-duplicates 
SELECT t2.* 
INTO table1 
FROM table2 t2 
LEFT JOIN #tempTable t1 ON t1.id = t2.id 
-- Alternative to above - LEFT JOIN table1 t1 ON t1.id = t2.id 
WHERE t1.id IS NULL 

-- display the duplicates 
SELECT t1.*, t2.* 
FROM #tempTable 
JOIN table1 t1 ON tempTable.id = t1.id 
JOIN table2 t2 ON tempTable.id = t2.id 
0
insert into one(...) 
select ... 
from two t 
where not exists (
    select * 
    from one x 
    where x.id = t.id 
) 
    ; 
0

由於您使用的是SQL 2008,可以考慮使用MERGE語句 這將插入唯一鍵

MERGE ONE AS Tar 
USING (SELECT Id FROM TWO) AS Sor 
ON Tar.Id=Sor.Id 
WHEN NOT MATCHED THEN 
INSERT(Id) 
values(Sor.Id); 

this將顯示重複鍵

SELECT B.ID 
FROM ONE A 
LEFT JOIN TWO B 
ON A.ID=B.ID 
WHERE B.ID IS NOT NULL 
相關問題