129 votes

Clause IN avec NULL ou IS NULL

Postgres est la base de données

Puis-je utiliser une valeur NULL pour une clause IN ? exemple:

SELECT *
FROM tbl_name
WHERE id_field IN ('value1', 'value2', 'value3', NULL)

Je veux limiter aux quatre valeurs.

J'ai essayé la déclaration ci-dessus et cela ne fonctionne pas, eh bien elle s'exécute mais n'ajoute pas les enregistrements avec des champs id NULL.

J'ai également essayé d'ajouter une condition OR mais cela fait juste tourner la requête sans fin en vue.

SELECT *
FROM tbl_name
WHERE other_condition = bar
AND another_condition = foo
AND id_field IN ('value1', 'value2', 'value3')
OR id_field IS NULL

Des suggestions ?

17 votes

Une instruction dans sera analysée de la même manière que champ=val1 ou champ=val2 ou champ=val3. Mettre un nul là-dedans se résumera à champ=null ce qui ne fonctionnera pas.

1 votes

La deuxième requête devrait être correcte. Quelles autres choses sont dans votre clause where ?

0 votes

@Daniel A. White, mis à jour pour refléter la requête avec plus de conditions

1voto

ch2o Points 421

Je sais que c'est tard pour répondre mais cela pourrait être utile pour quelqu'un d'autre Vous pouvez utiliser une sous-requête et convertir le nul en 0

SELECT *
FROM (SELECT CASE WHEN id_field IS NULL 
                THEN 0 
                ELSE id_field 
            END AS id_field
      FROM tbl_name) AS tbl
WHERE tbl.id_field IN ('value1', 'value2', 'value3', 0)

0 votes

Il s'agit d'une réponse similaire à celle d'Ove Halseth utilisant coalesce.

0voto

Roger Rowe Points 1

Null fait référence à une absence de données. Null est formellement défini comme une valeur qui est non disponible, non affectée, inconnue ou inapplicable (Guide d'examen OCA Oracle Database 12c, SQL Fundamentals I, p. 87). Par conséquent, il se peut que vous ne voyiez pas d'enregistrements avec des colonnes contenant des valeurs nulles lorsque ces colonnes sont restreintes en utilisant des clauses "in" ou "not in".

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