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

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

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.