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

zSy*_*sis 6 sql sql-server duplicate-data

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

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

Mar*_*ell 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
Run Code Online (Sandbox Code Playgroud)

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

  • 只要没有列包含空值,这就可以很好地工作.一旦发生这种情况,你就必须开始搞乱每个可空列的复杂条件,如(a.Name = b.Name OR(a.Name IS NULL和b.Name IS NULL)).避免空洞的另一个原因. (5认同)

Chr*_*tal 8

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

delete * from table1 intersect select * from table2
Run Code Online (Sandbox Code Playgroud)