sql >> Databasteknik >  >> RDS >> Mysql

Fixa "ERROR 1222 (21000):De använda SELECT-satserna har ett annat antal kolumner" när du använder UNION i MySQL

Om du får "ERROR 1222 (21000):De använda SELECT-satserna har ett annat antal kolumner" när du använder UNION sats i en MySQL-fråga beror det förmodligen på att antalet kolumner som returneras av varje SELECT uttalandet är annorlunda.

Till exempel den första SELECT sats kan returnera två kolumner, men den andra SELECT uttalande returnerar tre.

För att åtgärda det här problemet, se till att båda SELECT satser returnerar samma antal kolumner.

Exempel på fel

Här är ett exempel på kod som ger felet:

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

Resultat:

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

Här är den första SELECT uttalande returnerar en kolumn (TeacherName ), men den andra SELECT uttalande returnerar två kolumner (StudentId och StudentName ).

Lösning

Sättet att åtgärda problemet är att säkerställa både SELECT satser returnerar samma antal kolumner

Så med exemplet ovan kan vi antingen ta bort den extra kolumnen från vår andra SELECT uttalande:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultat:

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

Eller så kan vi lägga till ytterligare en kolumn till den första SELECT uttalande:

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

Resultat:

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

Tänk på att du kan få olika resultat beroende på vilket alternativ du väljer. Detta beror på att UNION returnerar distinkta rader som standard. När vi lägger till ytterligare en kolumn finns det en möjlighet att en tidigare duplicerad rad nu blir en unik rad, beroende på värdet i den extra kolumnen.

Vi kan också använda UNION ALL , som returnerar dubbletter av värden:

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

Resultat:

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

  1. Netherlands Access Developer Day 2019 – 14 september

  2. Anropa en lagrad procedur med parameter i c#

  3. Att få ID för en rad uppdaterade jag i SQL Server

  4. Infoga data i SQL Server 2017