Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Fix „ERROR 1222 (21000):The used SELECT Statements have a different number of columns“ bei Verwendung von UNION in MySQL

Wenn Sie „ERROR 1222 (21000):Die verwendeten SELECT-Anweisungen haben eine andere Anzahl von Spalten“ erhalten, wenn Sie die UNION verwenden -Klausel in einer MySQL-Abfrage, liegt es wahrscheinlich an der Anzahl der Spalten, die von jedem SELECT zurückgegeben werden Aussage ist anders.

Zum Beispiel das erste SELECT -Anweisung könnte zwei Spalten zurückgeben, aber die zweite SELECT -Anweisung gibt drei zurück.

Um dieses Problem zu beheben, stellen Sie sicher, dass beide SELECT Anweisungen geben die gleiche Anzahl von Spalten zurück.

Fehlerbeispiel

Hier ist ein Codebeispiel, das den Fehler erzeugt:

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

Ergebnis:

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

Hier das erste SELECT -Anweisung gibt eine Spalte zurück (TeacherName ), aber das zweite SELECT -Anweisung gibt zwei Spalten zurück (StudentId und StudentName ).

Lösung

Um dieses Problem zu beheben, stellen Sie sicher, dass sowohl SELECT Anweisungen geben die gleiche Anzahl von Spalten zurück

Mit dem obigen Beispiel können wir also entweder die zusätzliche Spalte aus unserem zweiten SELECT entfernen Aussage:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Ergebnis:

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

Oder wir können dem ersten SELECT eine weitere Spalte hinzufügen Aussage:

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

Ergebnis:

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

Beachten Sie, dass Sie je nach gewählter Option unterschiedliche Ergebnisse erhalten können. Dies liegt daran, dass UNION gibt standardmäßig unterschiedliche Zeilen zurück. Wenn wir eine weitere Spalte hinzufügen, besteht die Möglichkeit, dass eine zuvor duplizierte Zeile jetzt zu einer eindeutigen Zeile wird, abhängig vom Wert in der zusätzlichen Spalte.

Wir können auch UNION ALL verwenden , die doppelte Werte zurückgibt:

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

Ergebnis:

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