Lors de l'utilisation de INTERSECT
de PostgreSQL , si vous rencontrez une erreur qui lit "ERREUR :chaque requête INTERSECT 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 l'INTERSECT
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
INTERSECT
SELECT StudentId, StudentName FROM Students;
Résultat :
ERROR: each INTERSECT 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
INTERSECT
SELECT StudentName FROM Students;
Résultat :
teachername ------------- Bill Warren
Une autre option consiste à ajouter la colonne pertinente au premier SELECT
déclaration :
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students;
Résultat :
teacherid | teachername -----------+------------- 6 | Bill
Comme le montre cet exemple, différentes lignes peuvent être renvoyées selon l'option que vous choisissez.
Nous pouvons également utiliser INTERSECT ALL
, qui inclut les valeurs en double :
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT ALL
SELECT StudentId, StudentName FROM Students;
Résultat :
teacherid | teachername -----------+------------- 6 | Bill
Cela peut également renvoyer des résultats identiques ou différents, selon les données.