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.