0

我想知道是否有人可以帮助我?

在我的数据库中,我有两个表,它们具有相同的列并包含相同类型的数据。我的第一个表是我们过去 6 年一直在维护的表,其中有几百万条记录。我的第二张表是我们从其他地方获得的一张,其中包含超过 1 亿条记录。表二中的一些数据很可能已经包含在表一中。

我想要实现的是将表二中的唯一记录添加到表一中。

我的 PK 对于两个表都是相同的,并且正是这一列可以识别它是否是重复的。

问题出现了,我需要在流程结束时显示重复记录,以便可以查看这些记录。

我对 SQL 有很好的基础知识,但还不够先进,无法做到这一点。如果有人能够提供帮助,将不胜感激。

4

4 回答 4

0
insert into one(...) 
select ...
from two t
where not exists (
  select *
  from one x
  where x.id = t.id
  )
  ;
于 2013-04-24T11:37:56.410 回答
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);

这将向您显示重复的键

SELECT B.ID
FROM ONE A
LEFT JOIN TWO B
ON A.ID=B.ID
WHERE B.ID IS NOT NULL  
于 2013-04-25T12:31:45.337 回答
0

请试试:

INSERT INTO Table1
SELECT DISTINCT * FROM Table1 
WHERE PrimaryKeyColumn NOT IN (SELECT PrimaryKeyColumn from Table1)
于 2013-04-24T11:35:41.297 回答
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
于 2013-04-24T11:36:09.187 回答