Как сравнить две таблицы и удалить повторяющиеся строки в SQL?

У меня есть две таблицы, и мне нужно удалить строки из первой таблицы, если точная копия строки существует во второй таблице.

Есть ли у кого-нибудь пример того, как я бы это сделал на сервере MSSQL?

Ответов (5)

Решение

Что ж, в какой-то момент вам нужно будет проверить все столбцы - можно также присоединиться ...

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 гораздо более элегантно, и я буду использовать его в будущем вместо того, чтобы записывать все критерии внешнего соединения :)

Если вы используете SQL Server 2005, вы можете использовать пересечение :

delete * from table1 intersect select * from table2

попробуй это:

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

Я бы попробовал запрос DISTINCT и сделал объединение двух таблиц.

Вы можете использовать язык сценариев, такой как asp / php, для форматирования вывода в серию операторов вставки, чтобы перестроить таблицу с полученными уникальными данными.