Можно ли отменить предложение where?
например
DELETE * FROM table WHERE id != 2;
mysql
sql
where-clause
negate
Фрэнк Вилеа
источник
источник
id != NULL
работает не так, как вы ожидаете.Ответы:
Вы можете сделать это
DELETE FROM table WHERE id NOT IN ( 2 )
ИЛИ
DELETE FROM table WHERE id <> 2
Как заметил @Frank Schmitt, вы также можете быть осторожны с значениями NULL. Если вы хотите удалить все, чего нет
2
(включая NULL), добавьтеOR id IS NULL
в предложение WHERE.источник
!= NULL
не работают: «Вы не можете использовать операторы арифметического сравнения, такие как =, <или <>, для проверки на NULL». ( из документации MySQL ). Значит, нужно использоватьIS NOT NULL
.На ваш вопрос уже ответили другие постеры, я просто хочу отметить, что
delete from table where id <> 2
(или его варианты, не id = 2 и т. д.) не удаляют строки, где id равен NULL.
Если вы также хотите удалить строки с id = NULL:
delete from table where id <> 2 or id is NULL
источник
delete from table where id <> 2
edit: исправить синтаксис MySQL
источник
Вы можете сделать следующее:
DELETE * FROM table WHERE NOT(id = 2);
источник
Используйте,
<>
чтобы отрицать предложение where.источник
Вернитесь к формальной логике и алгебре. Выражение вроде
может быть отменено двумя способами:
Очевидный способ:
Вышесказанное также можно переформулировать, вам просто нужно запомнить некоторые свойства логических выражений:
!( A & B )
эквивалентно(!A | !B)
.!( A | B )
эквивалентно(!A & !B)
.!( !A )
эквивалентен (A).Распределите НЕ (!) По всему выражению, к которому оно применяется, инвертируя операторы и устраняя двойные отрицания по мере продвижения:
Итак, в общем, любое предложение where может быть отменено в соответствии с вышеуказанными правилами. Отрицание этого
select * from foo where test-1 and test-2 and ( test-3 OR test-4 )
является
select * from foo where NOT( test-1 and test-2 and ( test-3 OR test-4 ) )
или
select * from foo where not test-1 OR not test-2 OR ( not test-3 and not test-4 )
Что лучше? Это очень зависимый от контекста вопрос. Только вы можете это решить.
Однако имейте в виду, что использование NOT может повлиять на то, что оптимизатор может или не может делать. Вы можете получить неоптимальный план запроса.
источник
WHERE id <> 2
должно работать нормально ... Это то, что вам нужно?источник
Да. Если мне не изменяет память, это должно сработать. Наши вы можете использовать:
DELETE FROM table WHERE id <> 2
источник
Лучшее решение - использовать
DELETE FROM table WHERE id NOT IN ( 2 )
источник
Я как раз решал эту проблему. Если вы используете <> или не указан в переменной, то есть null, это приведет к false. Поэтому вместо <> 1 вы должны проверить это так:
источник