Mysql
 sql >> Database >  >> RDS >> Mysql

Correzione di "ERRORE 1222 (21000):le istruzioni SELECT utilizzate hanno un numero diverso di colonne" quando si utilizza UNION in MySQL

Se ricevi "ERRORE 1222 (21000):le istruzioni SELECT utilizzate hanno un numero diverso di colonne" quando usi UNION clausola in una query MySQL, è probabilmente dovuto al numero di colonne restituite da ogni SELECT l'affermazione è diversa.

Ad esempio, il primo SELECT l'istruzione potrebbe restituire due colonne, ma la seconda SELECT l'istruzione restituisce tre.

Per risolvere questo problema, assicurati che sia SELECT le istruzioni restituiscono lo stesso numero di colonne.

Esempio di errore

Ecco un esempio di codice che produce l'errore:

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

Risultato:

ERROR 1222 (21000): The used SELECT statements have a different number of columns

Qui, il primo SELECT l'istruzione restituisce una colonna (TeacherName ), ma il secondo SELECT l'istruzione restituisce due colonne (StudentId e StudentName ).

Soluzione

Il modo per risolvere questo problema è garantire entrambi SELECT le istruzioni restituiscono lo stesso numero di colonne

Quindi, usando l'esempio sopra, possiamo rimuovere la colonna extra dal nostro secondo SELECT dichiarazione:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Risultato:

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

Oppure possiamo aggiungere un'altra colonna al primo SELECT dichiarazione:

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

Risultato:

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

Tieni presente che puoi ottenere risultati diversi a seconda dell'opzione che scegli. Questo perché UNION restituisce righe distinte per impostazione predefinita. Quando aggiungiamo un'altra colonna, c'è la possibilità che una riga precedentemente duplicata ora diventi una riga univoca, a seconda del valore nella colonna extra.

Possiamo anche usare UNION ALL , che restituisce valori duplicati:

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

Risultato:

+-----------+-------------+
| 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        |
+-----------+-------------+