Når du bruger PostgreSQL's EXCEPT operator, hvis du støder på en fejl, der lyder "FEJL:hver UNDTAGET forespørgsel skal have det samme antal kolonner ", det er fordi der er et misforhold i antallet af kolonner, der returneres af forespørgslerne på hver side af EXCEPT operatør.
Måden at løse dette på er at sikre, at både SELECT sætninger returnerer det samme antal kolonner.
Eksempel på fejl
Her er et eksempel på kode, der producerer fejlen:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students; Resultat:
ERROR: each EXCEPT query must have the same number of columns LINE 3: SELECT StudentId, StudentName FROM Students;
Her er den første SELECT sætning returnerer én kolonne (TeacherName ), men den anden SELECT sætning returnerer to kolonner (StudentId og StudentName ).
Løsning
Løsningen er at sikre både SELECT udsagn returnerer det samme antal kolonner
Ved at bruge ovenstående eksempel kan vi enten fjerne den ekstra kolonne fra vores anden SELECT erklæring:
SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students; Resultat:
teachername ------------- Cathy Ben
En anden mulighed er at tilføje den relevante kolonne til den første SELECT erklæring:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT
SELECT StudentId, StudentName FROM Students; Resultat:
teacherid | teachername
-----------+-------------
3 | Cathy
4 | Cathy
1 | Warren
5 | Bill
2 | Ben Som dette eksempel viser, kan forskellige rækker returneres afhængigt af hvilken mulighed du vælger.
Vi kan også bruge EXCEPT ALL , som returnerer duplikerede værdier:
SELECT TeacherId, TeacherName FROM Teachers
EXCEPT ALL
SELECT StudentId, StudentName FROM Students; Resultat:
teacherid | teachername
-----------+-------------
3 | Cathy
4 | Cathy
1 | Warren
5 | Bill
2 | Ben Dette kan også returnere de samme eller forskellige resultater, afhængigt af dataene.