Ако получавате „ГРЕШКА 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 | +-----------+-------------+