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