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