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.
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)