Как я могу сравнить две таблицы и удалить дублирующиеся строки в SQL? - PullRequest
6 голосов
/ 27 февраля 2009

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

У кого-нибудь есть пример, как мне поступить так на сервере MSSQL?

Ответы [ 5 ]

9 голосов
/ 27 февраля 2009

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

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(*), но это только помогает - вам все равно нужно проверить фактические значения, чтобы исключить хеш-конфликты.

8 голосов
/ 27 февраля 2009

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

delete * from table1 intersect select * from table2
1 голос
/ 27 февраля 2009

Я думаю, что psuedocode ниже сделает это ..

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

0 голосов
/ 05 сентября 2016

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

DELETE t1 FROM t1 INNER JOIN t2 ON t1.name = t2.name WHERE t1.id = t2.id
0 голосов
/ 27 февраля 2009

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

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

...