Подтвердить что ты не робот

Удалить на основе составного ключа из другой таблицы

Я действительно неохотно публиковал это, потому что я чувствую, что это общая проблема, но я не могу найти ответ, который относится к этой ситуации... (может быть, я просто плохой гуглер).

У меня есть две идентичные таблицы (столбцы, а не данные), table1 и table2. Я хочу удалить записи в таблице 1, в которых объединенный ключ (col1, col2) существует в обеих таблицах. Вот то, что у меня есть, что кажется правильным для меня, но вызывает ошибку.

DELETE FROM Table1
WHERE (**Col1**, Col2) IN
(SELECT Col1, Col2
FROM Table1 a
JOIN Table2 b
    ON a.Col1 = b.Col1
    AND a.Col2 = b.Col2)

Ошибка:

Msg 4145, Level 15, State 1, Line 212 Выражение небулевого типа, указанное в контексте, где ожидается условие, рядом с ','.

Я поставил два * вокруг части кода, которая имеет "красные ошибки".

4b9b3361

Ответ 1

Это можно выполнить с помощью JOIN с помощью DELETE:

DELETE a
FROM 
    Table1 a 
    JOIN Table2 b
        ON a.Col1 = b.Col1
        AND a.Col2 = b.Col2

Ответ 2

Какая СУБД это? Если он находится в оральном, то должно быть проведено сравнение в паре.

DELETE FROM Table1
WHERE (Col1, Col2) IN
(SELECT Col1, Col2
 FROM Table2)

Если это SQL-сервер, тогда решение Майкла должно работать.