Разница между (NULL) и пустым в значениях столбца mysql - PullRequest
3 голосов
/ 30 марта 2019

Я работаю в компании, где мы используем базу данных Spring -Hibernate и mysql в бэкэнде.

Есть таблица tc_wallet
В этой таблице у меня есть столбец tips_type , который имеет значения

  1. Коллекция, подлежащая оплате
  2. '' (пусто)
  3. NULL -> Ни одно значение не было инициализировано

Теперь, когда я запускаю запрос:

SELECT * 
FROM `tc_wallet` 
WHERE 
    login_id = 'gaurav.wakharkar' 
    AND `delete_flag` = 'F' 
    AND `tips_type` != 'Collection' 

Я получаю результаты со значением столбца как '' (пусто).

Login_id            tips_type   
gaurav.wakharkar                 
gaurav.wakharkar         
gaurav.wakharkar   

Но даже (NULL) равно! = 'Коллекция' должна удовлетворять вышеуказанному условию.
Так что, по моему мнению, результат должен был быть.

Login_id            tips_type   
gaurav.wakharkar                 
gaurav.wakharkar         
gaurav.wakharkar       
gaurav.wakharkar    (NULL)   
gaurav.wakharkar    (NULL)

Есть ли проблемы при проверке / сравнении значений с (NULL)?
Это ведет себя по-другому?

Ответы [ 2 ]

3 голосов
/ 30 марта 2019

Для проверки на нулевое значение вы хотите использовать IS NULL. Сравнение NULL с чем-то другим с помощью оператора равенства (или оператора неравенства) всегда ложно.

Рассмотрим:

SELECT * 
FROM `tc_wallet` 
WHERE 
    login_id = 'gaurav.wakharkar' 
    AND `delete_flag` = 'F' 
    AND (`tips_type` IS NULL OR `tips_type` != 'Collection')
0 голосов
/ 30 марта 2019

измените ваш запрос на

SELECT 
  * 
FROM
  `tc_wallet` 
WHERE login_id = 'gaurav.wakharkar' 
  AND `delete_flag` = 'F' 
  AND (`tips_type` != 'Collection' or `tips_type` is null)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...