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

Correction de l'erreur :"Les SELECT à gauche et à droite d'UNION n'ont pas le même nombre de colonnes de résultats" dans SQLite

Si vous obtenez "Erreur :dans la préparation, les SELECT à gauche et à droite de l'UNION n'ont pas le même nombre de colonnes de résultats…" lorsque vous essayez d'utiliser le UNION opérateur dans SQLite, c'est parce que l'un des SELECT renvoie plus de colonnes que l'autre.

Lorsque vous utilisez l'UNION opérateur, les deux SELECT les instructions doivent renvoyer le même nombre de colonnes.

Pour résoudre ce problème, assurez-vous que le SELECT renvoient le même nombre de colonnes.

Exemple d'erreur

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

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

Résultat :

Erreur :dans prepare, les SELECT à gauche et à droite de UNION n'ont pas le même nombre de colonnes de résultat (1)

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 façon de résoudre ce problème est de s'assurer à la fois SELECT les instructions renvoient le même nombre de colonnes

Donc, 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; 

Résultat :

TeacherName-----------Ben Bill Cathy Ein Faye Jet Spike Warren 

Ou nous pouvons ajouter une autre colonne au premier SELECT déclaration :

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

Résultat :

TeacherId TeacherName--------- -----------1 Faye 1 Warren 2 Ben 2 Jet 3 Cathy 3 Spike 4 Cathy 4 Ein 5 Bill 5 Warren 6 Bill 

Gardez à l'esprit 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; 

Résultat :

TeacherId TeacherName--------- -----------1 Warren 2 Ben 3 Cathy 4 Cathy 5 Bill 6 Bill 1 Faye 2 Jet 3 Spike 4 Ein 5 Warren 6 Bill