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

Correction "ERROR 1222 (21000):Les instructions SELECT utilisées ont un nombre différent de colonnes" lors de l'utilisation d'UNION dans MySQL

Si vous obtenez "ERROR 1222 (21000):Les instructions SELECT utilisées ont un nombre différent de colonnes" lors de l'utilisation de UNION clause dans une requête MySQL, c'est probablement parce que le nombre de colonnes renvoyées par chaque SELECT l'instruction est différente.

Par exemple, le premier SELECT L'instruction peut renvoyer deux colonnes, mais la seconde SELECT l'instruction renvoie trois.

Pour résoudre ce problème, assurez-vous 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 1222 (21000): The used SELECT statements have a different number of columns

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 |
+-------------+
| Warren      |
| Ben         |
| Cathy       |
| Bill        |
| Faye        |
| Jet         |
| Spike       |
| Ein         |
+-------------+

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 | Warren      |
|         2 | Ben         |
|         3 | Cathy       |
|         4 | Cathy       |
|         5 | Bill        |
|         6 | Bill        |
|         1 | Faye        |
|         2 | Jet         |
|         3 | Spike       |
|         4 | Ein         |
|         5 | Warren      |
+-----------+-------------+

N'oubliez pas 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        |
+-----------+-------------+