Несколько выражений с IN - PullRequest
7 голосов
/ 12 марта 2012

У меня есть две довольно большие (более 4 миллионов записей) таблицы с одинаковой структурой, и у них около 300 тысяч дублированных строк. Я хотел бы DELETE дублировать строки, используя синтаксис DELETE IN.

Я уже сделал это с помощью оператора MERGE (доступен только в 2008 году или новее, поэтому я не могу использовать его, так как я все еще работаю в 2005 году) и DELETE EXISTS, но я работаю в некоторые неприятности заставить DELETE IN работать.

Проблема, с которой я столкнулся с DELETE IN, заключается в том, что моя большая таблица имеет составной первичный ключ, то есть я могу идентифицировать только уникальные строки, используя все эти столбцы вместе.

Возможно ли в T-SQL иметь несколько выражений в качестве параметров для предложения IN? Что-то вроде:

DELETE FROM MyBigTable
WHERE ([Column1], [Column2], [Column3]) IN
    (SELECT [Column1],
            [Column2],
            [Column3]
     FROM MyBigTable
     INTERSECT
     SELECT [Column1],
            [Column2],
            [Column3]
     FROM MyOtherBigTable)

1 Ответ

14 голосов
/ 12 марта 2012

Вы можете просто сделать JOIN для этого:

DELETE A
FROM MyBigTable A
INNER JOIN MyOtherBigTable B
ON A.Column1 = B.Column1 AND A.Column2 = B.Column2 AND A.Column3 = B.Column3
...