Mysql
 sql >> база данни >  >> RDS >> Mysql

Поправете „ГРЕШКА 1222 (21000):Използваните оператори SELECT имат различен брой колони“, когато използвате UNION в MySQL

Ако получавате „ГРЕШКА 1222 (21000):Използваните оператори SELECT имат различен брой колони“, когато използвате UNION клауза в MySQL заявка, вероятно е защото броят на колоните, върнати от всеки SELECT твърдението е различно.

Например първият SELECT операторът може да върне две колони, но вторият SELECT изявление връща три.

За да отстраните този проблем, уверете се, че SELECT операторите връщат същия брой колони.

Пример за грешка

Ето пример за код, който създава грешката:

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

Резултат:

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

Тук първият SELECT оператор връща една колона (TeacherName ), но вторият SELECT оператор връща две колони (StudentId и StudentName ).

Решение

Начинът да коригирате този проблем е да гарантирате и двете SELECT операторите връщат същия брой колони

Така че, използвайки горния пример, можем да премахнем допълнителната колона от нашия втори SELECT изявление:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Резултат:

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

Или можем да добавим друга колона към първия SELECT изявление:

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

Резултат:

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

Имайте предвид, че можете да получите различни резултати в зависимост от това коя опция изберете. Това е така, защото UNION връща различни редове по подразбиране. Когато добавим друга колона, има възможност един по-рано дублиран ред да стане уникален ред, в зависимост от стойността в допълнителната колона.

Можем също да използваме UNION ALL , който връща дублиращи се стойности:

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

Резултат:

+-----------+-------------+
| 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. Как да копирам таблица в MySQL

  2. Как да свържете множество редове в една колона в MySQL

  3. Как да импортирате/възстановявате MySql таблици с помощта на PHP

  4. Значение на MySQL INT

  5. Как да актуализирате множество колони в MySQL