Когато използвате UNION оператор в PostgreSQL, ако срещнете грешка, която гласи „ГРЕШКА:всяка UNION заявка трябва да има същия брой колони “, защото има несъответствие в броя на колоните, върнати от заявките от двете страни на UNION оператор.
Тази грешка възниква, когато броят на колоните, върнати от всеки SELECT твърдението е различно.
Начинът да поправите това е да се уверите, че и двете SELECT операторите връщат същия брой колони.
Пример за грешка
Ето пример за код, който създава грешката:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students; Резултат:
ERROR: each UNION query must have the same number of columns LINE 3: SELECT StudentId, StudentName FROM Students;
Тук първият SELECT оператор връща една колона (TeacherName ), но вторият SELECT оператор връща две колони (StudentId и StudentName ).
Решение
Решението е да се гарантира и двете SELECT операторите връщат същия брой колони
Използвайки горния пример, можем да премахнем допълнителната колона от нашия втори SELECT изявление:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Или можем да добавим друга колона към първия SELECT изявление:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Важно е да се отбележи, че можете да получите различни резултати в зависимост от това коя опция изберете. Това е така, защото UNION връща различни редове по подразбиране. Когато добавим друга колона, има възможност един по-рано дублиран ред да стане уникален ред, в зависимост от стойността в допълнителната колона.
Можем също да използваме UNION ALL , който връща дублиращи се стойности:
SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students; Това може също да върне различни резултати към другите примери.