6

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

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

4

5 回答 5

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

于 2009-02-27T16:22:34.427 回答
8

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

delete * from table1 intersect select * from table2
于 2009-02-27T16:23:49.477 回答
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 帖子要优雅得多,以后我会使用它,而不是写出所有的外部连接标准 :)

于 2009-02-27T16:23:05.690 回答
0

我会尝试 DISTINCT 查询并合并两个表。

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

于 2009-02-27T16:23:39.197 回答
0

试试这个:

DELETE t1 FROM t1 INNER JOIN t2 ON t1.name = t2.name WHERE t1.id = t2.id
于 2016-09-05T13:36:49.687 回答