У меня есть две таблицы, и мне нужно удалить строки из первой таблицы, если во второй таблице существует точная копия строки.
У кого-нибудь есть пример того, как я буду делать это на сервере MSSQL?
У меня есть две таблицы, и мне нужно удалить строки из первой таблицы, если во второй таблице существует точная копия строки.
У кого-нибудь есть пример того, как я буду делать это на сервере MSSQL?
Что ж, в какой-то момент вам придется проверить все столбцы — возможно, вы присоединитесь...
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
и таблица b
присутствуют в файле view
. Тогда как я могу удалить повторяющиеся строки и сохранить оригинал один раз? Я разместил [stackoverflow.com/questions/32065340/ в такой ситуации.
- person MAK; 18.08.2015
Если вы используете SQL Server 2005, вы можете использовать intersect:
delete * from table1 intersect select * from table2
Я думаю, что приведенный ниже псевдокод сделает это.
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