Когато използвате 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;
Това може също да върне различни резултати към другите примери.