sql >> Database >  >> RDS >> Mysql

Fix "ERROR 1222 (21000):de gebruikte SELECT-instructies hebben een ander aantal kolommen" bij gebruik van UNION in MySQL

Als u "ERROR 1222 (21000):de gebruikte SELECT-instructies hebben een ander aantal kolommen" krijgt bij gebruik van de UNION clausule in een MySQL-query, komt dit waarschijnlijk omdat het aantal kolommen dat wordt geretourneerd door elke SELECT verklaring is anders.

Bijvoorbeeld de eerste SELECT instructie kan twee kolommen retourneren, maar de tweede SELECT statement geeft drie terug.

Om dit probleem op te lossen, moet u ervoor zorgen dat zowel SELECT instructies geven hetzelfde aantal kolommen terug.

Voorbeeld van fout

Hier is een voorbeeld van code die de fout veroorzaakt:

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

Resultaat:

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

Hier, de eerste SELECT statement retourneert één kolom (TeacherName ), maar de tweede SELECT statement retourneert twee kolommen (StudentId en StudentName ).

Oplossing

De manier om dit probleem op te lossen is ervoor te zorgen dat zowel SELECT instructies geven hetzelfde aantal kolommen terug

Dus door het bovenstaande voorbeeld te gebruiken, kunnen we ofwel de extra kolom verwijderen uit onze tweede SELECT verklaring:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Resultaat:

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

Of we kunnen een andere kolom toevoegen aan de eerste SELECT verklaring:

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

Resultaat:

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

Houd er rekening mee dat u verschillende resultaten kunt krijgen, afhankelijk van de optie die u kiest. Dit komt omdat UNION retourneert standaard verschillende rijen. Wanneer we nog een kolom toevoegen, bestaat de mogelijkheid dat een eerder dubbele rij nu een unieke rij wordt, afhankelijk van de waarde in de extra kolom.

We kunnen ook UNION ALL . gebruiken , die dubbele waarden retourneert:

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

Resultaat:

+-----------+-------------+
| 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. Verzamelmethode:DELETE-procedure in Oracle Database

  2. MySQL CRC32() Functie – Voorbeelden

  3. SQLite-installatie

  4. Begrip van opnieuw uitvoeren van loggroep versus bestand versus lid