PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Correction de "ERREUR :chaque requête EXCEPT doit avoir le même nombre de colonnes" dans PostgreSQL

Lors de l'utilisation de EXCEPT de PostgreSQL , si vous rencontrez une erreur qui lit "ERREUR :chaque requête EXCEPT doit avoir le même nombre de colonnes ", c'est parce qu'il y a une incohérence dans le nombre de colonnes renvoyées par les requêtes de chaque côté de EXCEPT opérateur.

La façon de résoudre ce problème est de s'assurer que SELECT renvoient le même nombre de colonnes.

Exemple d'erreur

Voici un exemple de code qui génère l'erreur :

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;

Résultat :

ERROR:  each EXCEPT query must have the same number of columns
LINE 3: SELECT StudentId, StudentName FROM Students;

Ici, le premier SELECT l'instruction renvoie une colonne (TeacherName ), mais le deuxième SELECT l'instruction renvoie deux colonnes (StudentId et StudentName ).

Solution

La solution est d'assurer à la fois SELECT les instructions renvoient le même nombre de colonnes

En utilisant l'exemple ci-dessus, nous pouvons soit supprimer la colonne supplémentaire de notre deuxième SELECT déclaration :

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Résultat :

 teachername 
-------------
 Cathy
 Ben

Une autre option consiste à ajouter la colonne pertinente au premier SELECT déclaration :

SELECT TeacherId, TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;

Résultat :

 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Comme le montre cet exemple, différentes lignes peuvent être renvoyées selon l'option que vous choisissez.

Nous pouvons également utiliser EXCEPT ALL , qui renvoie des valeurs en double :

SELECT TeacherId, TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentId, StudentName FROM Students;

Résultat :

 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Cela peut également renvoyer des résultats identiques ou différents, selon les données.