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.