На самом деле *
не требуется для операторов удаления, потому что он удаляет всю строку, которая соответствует условию where. Обычно <>
(не равно) используется для предоставления единственного значения c. (как показано ниже)
DELETE FROM Table1 WHERE Table1.ID <> 1
Но подзапрос возвращает строки / записи (с выбранными столбцами). Следовательно, вы получили ошибку: At most one record can be returned by this subquery
Переход к используемому вами предложению NOT IN
, это правильный способ сделать это, но NOT IN
может стать довольно сложным, если большее количество строк участвует в подзапросе, так как NOT IN
выполняет соединение за укрытием.
Лучший способ в вашем случае - использовать NOT(condition)
, поскольку вы уже знаете condition
, для которого вам нужны требуемые идентификаторы таблицы. (как показано ниже)
DELETE FROM Table1 WHERE NOT(condition)
Это делает вашу работу довольно быстро, поскольку в нее не входят никакие объединения, как в предыдущем случае.