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

Запрос "не равно" не работает

У меня очень простой запрос:

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
4b9b3361

Ответ 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;