Проблема для вашего примера запроса заключается в том, что предложение IN нельзя использовать вместе с SELECT *
, когда SELECT *
возвращает более одного столбца. Вам необходимо указать столбец ...
НЕ В
DELETE FROM B
WHERE B.2 NOT IN (SELECT A.1
FROM A)
НЕ СУЩЕСТВУЕТ
DELETE FROM B
WHERE NOT EXISTS (SELECT NULL
FROM A
WHERE A.1 = B.2)
SQLite не поддерживает JOINs в операторах DELETE, но вы также можете использовать:
DELETE FROM B
WHERE B.2 IN (SELECT B.2
FROM B
LEFT JOIN A ON A.1 = B.2
WHERE A.1 IS NULL)
Вывод:
У меня нет статистики производительности для SQLite, но NOT EXISTS
был бы моим выбором, потому что он возвращает true при первом удовлетворении - очень хорошо для работы с дубликатами.