Lors de l'utilisation de l'UNION
opérateur dans PostgreSQL, si vous rencontrez une erreur qui lit "ERREUR :chaque requête UNION 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'UNION
opérateur.
Cette erreur se produit lorsque le nombre de colonnes renvoyées par chaque SELECT
l'instruction est différente.
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
UNION
SELECT StudentId, StudentName FROM Students;
Résultat :
ERROR: each UNION 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
UNION
SELECT StudentName FROM Students;
Ou nous pouvons ajouter une autre colonne au premier SELECT
déclaration :
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Il est important de noter que vous pouvez obtenir des résultats différents selon l'option que vous choisissez. C'est parce que UNION
renvoie des lignes distinctes par défaut. Lorsque nous ajoutons une autre colonne, il est possible qu'une ligne précédemment dupliquée devienne désormais une ligne unique, en fonction de la valeur de la colonne supplémentaire.
Nous pouvons également utiliser UNION ALL
, qui renvoie des valeurs en double :
SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;
Cela peut également renvoyer des résultats différents des autres exemples.