Bij gebruik van PostgreSQL's INTERSECT
operator, als u een fout tegenkomt die luidt:"ERROR:elke INTERSECT-query moet hetzelfde aantal kolommen hebben ", het is omdat er een mismatch is in het aantal kolommen dat wordt geretourneerd door de zoekopdrachten aan weerszijden van de INTERSECT
exploitant.
De manier om dit op te lossen is ervoor te zorgen dat zowel SELECT
instructies geven hetzelfde aantal kolommen terug.
Voorbeeld van fout
Hier is een voorbeeld van code die de fout veroorzaakt:
SELECT TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students;
Resultaat:
ERROR: each INTERSECT query must have the same number of columns LINE 3: SELECT StudentId, StudentName FROM Students;
Hier, de eerste SELECT
statement retourneert één kolom (TeacherName
), maar de tweede SELECT
statement retourneert twee kolommen (StudentId
en StudentName
).
Oplossing
De oplossing is om ervoor te zorgen dat zowel SELECT
instructies geven hetzelfde aantal kolommen terug
Met behulp van het bovenstaande voorbeeld kunnen we ofwel de extra kolom verwijderen uit onze tweede SELECT
verklaring:
SELECT TeacherName FROM Teachers
INTERSECT
SELECT StudentName FROM Students;
Resultaat:
teachername ------------- Bill Warren
Een andere optie is om de relevante kolom toe te voegen aan de eerste SELECT
verklaring:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students;
Resultaat:
teacherid | teachername -----------+------------- 6 | Bill
Zoals dit voorbeeld laat zien, kunnen verschillende rijen worden geretourneerd, afhankelijk van de optie die u kiest.
We kunnen ook INTERSECT ALL
. gebruiken , die dubbele waarden bevat:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT ALL
SELECT StudentId, StudentName FROM Students;
Resultaat:
teacherid | teachername -----------+------------- 6 | Bill
Dit kan ook dezelfde of verschillende resultaten opleveren, afhankelijk van de gegevens.