当前位置:  开发笔记 > 数据库 > 正文

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

如何解决《如何比较两个表并删除SQL中的重复行?》经验,为你挑选了2个好方法。

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

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



1> Marc Gravell..:

那么,在某些时候你将不得不检查所有列 - 也许还要加入......

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(*),但这只有帮助 - 你仍然需要检查实际值以排除哈希冲突.


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

2> Chris Van Op..:

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

delete * from table1 intersect select * from table2

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有