Запрос "не равно" не работает
У меня очень простой запрос:
SELECT * FROM `all_conversations` WHERE `deleted_1` != '1';
И мой deleted_1
по умолчанию - null
или некоторый идентификатор пользователя, но по какой-то причине этот запрос всегда возвращает мне 0 строк, я также пробовал <>
, но все же не повезло, что может быть неправильным?
EDTI Итак, после запуска большего количества запросов я выяснил, что мои проблемы были значением по умолчанию для поля deleted_1
, это было null
, поэтому я изменил свой запрос, и теперь он отлично работает:
SELECT *
FROM `all_conversations`
WHERE `deleted_1` != 'NULL'
AND `deleted_1` != 23
Ответы
Ответ 1
SELECT * FROM all_conversations WHERE deleted_1 <> 1 OR deleted_1 IS NULL
Значения NULL нуждаются в специальной обработке: http://dev.mysql.com/doc/refman/5.1/en/working-with-null.html
Я бы предложил использовать оператор бриллианта (<>
) в пользу !=
, поскольку первый из них является действительным SQL, а второй - добавлением MySQL.
Ответ 2
Можете ли вы попробовать следующее: deleted_1 is not null and deleted_1 != '1'
?
mysql> select 0 is not null and 0 != '1', 1 is not null and 1 != '1', null is not null and null != '1';
+----------------------------+----------------------------+----------------------------------+
| 0 is not null and 0 != '1' | 1 is not null and 1 != '1' | null is not null and null != '1' |
+----------------------------+----------------------------+----------------------------------+
| 1 | 0 | 0 |
+----------------------------+----------------------------+----------------------------------+
Или это deleted_1 is null or deleted_1 != '1'
:
mysql> select 0 is null or 0 != '1', 1 is null or 1 != '1', null is null or null != '1';
+-----------------------+-----------------------+-----------------------------+
| 0 is null or 0 != '1' | 1 is null or 1 != '1' | null is null or null != '1' |
+-----------------------+-----------------------+-----------------------------+
| 1 | 0 | 1 |
+-----------------------+-----------------------+-----------------------------+
Это действительно зависит от того, что вы хотите вернуть.
Ответ 3
Я рекомендую использовать NULL-безопасный оператор и отрицание
SELECT * FROM `all_conversations` WHERE NOT(`deleted_1` <=> '1');
Ответ 4
Попробуйте это.. Надеюсь, это сработает для вас.
SELECT *
FROM `all_conversations`
WHERE `deleted_1` IS NOT NULL
AND `deleted_1` <> 23
Ответ 5
Как насчет удаления одиночных кавычек вокруг 1?
SELECT * FROM `all_conversations` WHERE `deleted_1` != 1;