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

Ret "FEJL 1222 (21000):De brugte SELECT-sætninger har et andet antal kolonner", når du bruger UNION i MySQL

Hvis du får "FEJL 1222 (21000):De brugte SELECT-sætninger har et andet antal kolonner", når du bruger UNION klausul i en MySQL-forespørgsel, er det sandsynligvis fordi antallet af kolonner returneret af hver SELECT udsagn er anderledes.

For eksempel den første SELECT sætning kan returnere to kolonner, men den anden SELECT erklæring returnerer tre.

For at løse dette problem skal du sørge for både SELECT sætninger returnerer det samme antal kolonner.

Eksempel på fejl

Her er et eksempel på kode, der producerer fejlen:

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

Resultat:

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

Her er den første SELECT sætning returnerer én kolonne (TeacherName ), men den anden SELECT sætning returnerer to kolonner (StudentId og StudentName ).

Løsning

Måden at løse dette problem på er at sikre både SELECT udsagn returnerer det samme antal kolonner

Så ved at bruge ovenstående eksempel kan vi enten fjerne den ekstra kolonne fra vores anden SELECT erklæring:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultat:

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

Eller vi kan tilføje endnu en kolonne til den første SELECT erklæring:

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

Vær opmærksom på, at du kan få forskellige resultater afhængigt af, hvilken mulighed du vælger. Dette er fordi UNION returnerer adskilte rækker som standard. Når vi tilføjer endnu en kolonne, er der mulighed for, at en tidligere dublet række nu bliver en unik række, afhængigt af værdien i den ekstra kolonne.

Vi kan også bruge UNION ALL , som returnerer duplikerede værdier:

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. Hvordan opretter man json-format med group-concat mysql?

  2. Holland Access Developer Day 2019 – 14. september

  3. Rails 3.1:Forespørgsel efter postgres inden for et tidsinterval

  4. Hvor sund er din SQL-server? Proaktiv databaseovervågning er kritisk