如何比较两个表并删除SQL中的重复行?
答
嘛,在某些时候你将必须检查所有的列 - 还不如让加盟...
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(*)
,但这只有有助于 - 您仍然需要检查实际值以排除散列冲突。
答
我觉得下面的伪代码会做吧..
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
克里斯的INTERSECT后是更为优雅,虽然,我会使用,在未来,而不是写出来的所有外部的连接标准:)
答
我会尝试一个DISTINCT查询并做两个表的联合。
您可以使用像asp/php这样的脚本语言将输出格式化为一系列插入语句,以便重建生成的唯一数据表。
答
试试这个:
DELETE t1 FROM t1 INNER JOIN t2 ON t1.name = t2.name WHERE t1.id = t2.id
这只要没有任何列包含空值很好地工作。一旦发生这种情况,您必须开始处理复杂的条件,例如(a.Name = b.Name OR(a.Name IS NULL AND b.Name IS NULL))。另一个避免null的原因。 – 2009-03-02 00:39:12