3 votes

Différence entre (NULL) et vide dans les valeurs des colonnes mysql

Je travaille dans une entreprise où nous utilisons Spring -Hibernate et une base de données mysql en backend.

Il y a une table tc_wallet
Dans ce tableau, j'ai une colonne Type de conseils qui a des valeurs

  1. Recouvrement, à payer
  2. '' (vide)
  3. NULL --> Aucune valeur n'a été initialisée

Maintenant, quand je lance une requête :

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

J'obtiens des résultats dont la valeur de la colonne est '' (vide).

Login_id            tips_type   
gaurav.wakharkar                 
gaurav.wakharkar         
gaurav.wakharkar   

Mais même (NULL) est != 'Collection' devrait satisfaire à la condition ci-dessus.
Donc, selon moi, le résultat aurait dû être .

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

Y a-t-il un problème lors de la vérification/comparaison des valeurs avec (NULL) ?
Se comporte-t-il différemment ?

3voto

GMB Points 188687

Pour vérifier la nullité, vous voulez utiliser IS NULL . Comparaison de NULL à quelque chose d'autre avec l'opérateur d'égalité (ou l'opérateur d'inégalité) est toujours faux.

Pensez-y :

SELECT * 
FROM `tc_wallet` 
WHERE 
    login_id = 'gaurav.wakharkar' 
    AND `delete_flag` = 'F' 
    AND (`tips_type` IS NULL OR `tips_type` != 'Collection')

0voto

Asgardian Points 1

Changez votre requête en

SELECT 
  * 
FROM
  `tc_wallet` 
WHERE login_id = 'gaurav.wakharkar' 
  AND `delete_flag` = 'F' 
  AND (`tips_type` != 'Collection' or `tips_type` is null)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X