Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Napraw „BŁĄD 1222 (21000):Użyte instrukcje SELECT mają inną liczbę kolumn” podczas korzystania z UNION w MySQL

Jeśli otrzymujesz „BŁĄD 1222 (21000):Użyte instrukcje SELECT mają inną liczbę kolumn” podczas korzystania z UNION klauzuli w zapytaniu MySQL, prawdopodobnie dlatego, że liczba kolumn zwracanych przez każdy SELECT oświadczenie jest inne.

Na przykład pierwszy SELECT instrukcja może zwrócić dwie kolumny, ale druga SELECT instrukcja zwraca trzy.

Aby rozwiązać ten problem, upewnij się, że obie opcje SELECT oświadczenia zwracają tę samą liczbę kolumn.

Przykład błędu

Oto przykład kodu, który generuje błąd:

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

Wynik:

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

Tutaj pierwszy SELECT instrukcja zwraca jedną kolumnę (TeacherName ), ale drugi SELECT instrukcja zwraca dwie kolumny (StudentId i StudentName ).

Rozwiązanie

Sposobem na rozwiązanie tego problemu jest zapewnienie obu opcji SELECT oświadczenia zwracają tę samą liczbę kolumn

Korzystając z powyższego przykładu, możemy albo usunąć dodatkową kolumnę z naszego drugiego SELECT oświadczenie:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Wynik:

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

Lub możemy dodać kolejną kolumnę do pierwszego SELECT oświadczenie:

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

Wynik:

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

Pamiętaj, że możesz uzyskać różne wyniki w zależności od wybranej opcji. Dzieje się tak, ponieważ UNION domyślnie zwraca różne wiersze. Kiedy dodamy kolejną kolumnę, istnieje możliwość, że poprzednio zduplikowany wiersz stanie się teraz unikalnym wierszem, w zależności od wartości w dodatkowej kolumnie.

Możemy również użyć UNION ALL , który zwraca zduplikowane wartości:

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

Wynik:

+-----------+-------------+
| 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak utworzyć złożony klucz podstawowy w MySQL

  2. MySQL LAST_INSERT_ID() używany z wieloma rekordami Instrukcja INSERT

  3. Tworzenie aplikacji internetowej od podstaw przy użyciu Python Flask i MySQL:część 4

  4. Nie udało się zainicjować systemu konfiguracji

  5. Korzystanie z widoków MySQL