Når du bruger PostgreSQL's INTERSECT
operatør, hvis du støder på en fejl, der lyder "FEJL:hver INTERSECT-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 INTERSECT
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
INTERSECT
SELECT StudentId, StudentName FROM Students;
Resultat:
ERROR: each INTERSECT 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
INTERSECT
SELECT StudentName FROM Students;
Resultat:
teachername ------------- Bill Warren
En anden mulighed er at tilføje den relevante kolonne til den første SELECT
erklæring:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students;
Resultat:
teacherid | teachername -----------+------------- 6 | Bill
Som dette eksempel viser, kan forskellige rækker returneres afhængigt af hvilken mulighed du vælger.
Vi kan også bruge INTERSECT ALL
, som inkluderer duplikerede værdier:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT ALL
SELECT StudentId, StudentName FROM Students;
Resultat:
teacherid | teachername -----------+------------- 6 | Bill
Dette kan også returnere de samme eller forskellige resultater, afhængigt af dataene.