如何比较两个表并删除SQL中的重复行?

时间:2009-02-27 16:19:06

标签: sql sql-server duplicate-data

我有两个表,如果第二个表中存在一行的精确副本,我需要从第一个表中删除行。

有没有人有一个如何在MSSQL服务器中执行此操作的示例?

5 个答案:

答案 0 :(得分:9)

好吧,在某些时候你将不得不检查所有的栏目 - 不妨加入......

DELETE a
FROM a  -- first table
INNER JOIN b -- second table
      ON b.ID = a.ID
      AND b.Name = a.Name
      AND b.Foo = a.Foo
      AND b.Bar = a.Bar

应该这样做......还有CHECKSUM(*),但只有帮助 - 您仍然需要检查实际值以排除哈希冲突。

答案 1 :(得分:8)

如果您使用的是SQL Server 2005,则可以使用intersect

delete * from table1 intersect select * from table2

答案 2 :(得分:1)

我认为下面的伪代码会这样做..

DELETE FirstTable, SecondTable
FROM FirstTable
FULL OUTER JOIN SecondTable
ON FirstTable.Field1 = SecondTable.Field1
... continue for all fields
WHERE FirstTable.Field1 IS NOT NULL
AND SecondTable.Field1 IS NOT NULL

Chris的INTERSECT帖子虽然更加优雅,但我将来会使用它而不是写出所有外连接标准:)

答案 3 :(得分:0)

我会尝试DISTINCT查询并对两个表进行并集。

您可以使用像asp / php这样的脚本语言将输出格式化为一系列插入语句,以重建表格所产生的唯一数据。

答案 4 :(得分:0)

试试这个:

DELETE t1 FROM t1 INNER JOIN t2 ON t1.name = t2.name WHERE t1.id = t2.id