web-dev-qa-db-fra.com

Comment trouver toutes les lignes avec une valeur NULL dans n'importe quelle colonne à l'aide de PostgreSQL

Il existe de nombreuses questions légèrement similaires , mais aucune ne résout précisément ce problème. " Rechercher toutes les lignes avec des valeurs nulles dans n'importe quelle colonne " est le plus proche que j'ai pu trouver et offre une réponse pour SQL Server, mais je cherche un moyen de le faire dans PostgreSQL.

Comment puis-je sélectionner uniquement les lignes qui ont des valeurs NULL dans n'importe quelle colonne ?

Je peux obtenir tous les noms de colonne assez facilement:

select column_name from information_schema.columns where table_name = 'A';

mais on ne sait pas comment vérifier plusieurs noms de colonnes pour les valeurs NULL. De toute évidence, cela ne fonctionnera pas:

select* from A where (
  select column_name from information_schema.columns where table_name = 'A';
) IS NULL;

Et recherche n'a rien trouvé d'utile.

23
iconoclast

Vous pouvez utiliser NOT(<table> IS NOT NULL).

De la documentation :

Si l'expression a une valeur de ligne, alors IS NULL est vrai lorsque l'expression de ligne elle-même est nulle ou lorsque tous les champs de la ligne sont nuls, tandis que IS NOT NULL est vrai lorsque l'expression de ligne elle-même n'est pas nulle et que tous les champs de la ligne sont non nuls.

Donc :

SELECT * FROM t;
┌────────┬────────┐
│   f1   │   f2   │
├────────┼────────┤
│ (null) │      1 │
│      2 │ (null) │
│ (null) │ (null) │
│      3 │      4 │
└────────┴────────┘
(4 rows)

SELECT * FROM t WHERE NOT (t IS NOT NULL);
┌────────┬────────┐
│   f1   │   f2   │
├────────┼────────┤
│ (null) │      1 │
│      2 │ (null) │
│ (null) │ (null) │
└────────┴────────┘
(3 rows)
35
Marth