Когато използвате EXCEPT
на PostgreSQL оператор, ако срещнете грешка, която гласи „ГРЕШКА:всяка заявка ОСВЕН трябва да има същия брой колони “, защото има несъответствие в броя на колоните, върнати от заявките от двете страни на EXCEPT
оператор.
Начинът да поправите това е да се уверите, че и двете SELECT
операторите връщат същия брой колони.
Пример за грешка
Ето пример за код, който създава грешката:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;
Резултат:
ГРЕШКА:всяка заявка EXCEPT трябва да има еднакъв брой колони ЛИНИЯ 3:SELECT StudentId, StudentName FROM Students;
Тук първият SELECT
оператор връща една колона (TeacherName
), но вторият SELECT
оператор връща две колони (StudentId
и StudentName
).
Решение
Решението е да се гарантира и двете SELECT
операторите връщат същия брой колони
Използвайки горния пример, можем да премахнем допълнителната колона от нашия втори SELECT
изявление:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;
Резултат:
име на учителя ------------- Кати Бен
Друга възможност е да добавите съответната колона към първия SELECT
изявление:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students;
Резултат:
<пред> учителски | име на учител -----------+------------ 3 | Кати 4 | Кати 1 | Уорън 5 | Билет 2 | БенКакто показва този пример, различни редове могат да бъдат върнати в зависимост от това коя опция изберете.
Можем също да използваме EXCEPT ALL
, който връща дублиращи се стойности:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentId, StudentName FROM Students;
Резултат:
<пред> учителски | име на учител -----------+------------ 3 | Кати 4 | Кати 1 | Уорън 5 | Билет 2 | БенТова може също да върне същите или различни резултати, в зависимост от данните.