web-dev-qa-db-fra.com

Requête SQL - comment filtrer par null ou non null

Je veux filtrer un disque ....

Si statusid est null, filtrez l'enregistrement (où statusId n'est pas null)

Si statusid n'est pas null, filtrez l'enregistrement où statusid est égal à statusid spécifié.

Comment puis-je faire cela? 

29
001

Comme tu as dit

select * from tbl where statusid is null

ou

select * from tbl where statusid is not null

Si votre statusid n'est pas null, alors il sera sélectionné correctement lorsque vous aurez une valeur réelle, inutile de recourir à une logique "si" si c'est ce que vous pensiez

select * from tbl where statusid = 123 -- the record(s) returned will not have null statusid

si vous voulez sélectionner où il est nul ou une valeur, essayez

select * from tbl where statusid = 123 or statusid is null
49
JeremyWeir

Qu'en est-il de statusid = statusid. Null n'est jamais égal à null.

3
Zachary Scott
WHERE something IS NULL

et 

WHERE something IS NOT NULL
2
Dmitriy Naumov

set ansi_nulls offgosélectionnez * dans la table t jointure intérieure otherTable o sur t.statusid = o.statusid go

1
JStead

Où que vous essayiez de vérifier la valeur NULL d’une colonne, vous devriez utiliser

EST NULL et EST NON NULLE

Vous ne devez pas utiliser = NULL ou == NULL


Exemple (NULL)

select * from user_registration where registered_time IS NULL 

renverra les lignes avec registered_time la valeur est NULL


Exemple (NOT NULL)

select * from user_registration where registered_time IS NOT NULL 

retournera les lignes avec registered_time la valeur est NOT NULL

Remarque: Le mot clé null, not null et is est not case sensitive.

0
programmer

Je pense que cela pourrait fonctionner:

select * from tbl where statusid = isnull(@statusid,statusid)
0
pcofre