När du använder PostgreSQL:s INTERSECT
operator, om du stöter på ett fel som lyder "FEL:varje INTERSECT-fråga måste ha samma antal kolumner ", det beror på att det finns en oöverensstämmelse i antalet kolumner som returneras av frågorna på vardera sidan av INTERSECT
operatör.
Sättet att fixa detta är att se till att både SELECT
satser returnerar samma antal kolumner.
Exempel på fel
Här är ett exempel på kod som ger felet:
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;
Här är den första SELECT
uttalande returnerar en kolumn (TeacherName
), men den andra SELECT
uttalande returnerar två kolumner (StudentId
och StudentName
).
Lösning
Lösningen är att säkerställa både SELECT
satser returnerar samma antal kolumner
Med exemplet ovan kan vi antingen ta bort den extra kolumnen från vår andra SELECT
uttalande:
SELECT TeacherName FROM Teachers
INTERSECT
SELECT StudentName FROM Students;
Resultat:
teachername ------------- Bill Warren
Ett annat alternativ är att lägga till den relevanta kolumnen i den första SELECT
uttalande:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students;
Resultat:
teacherid | teachername -----------+------------- 6 | Bill
Som det här exemplet visar kan olika rader returneras beroende på vilket alternativ du väljer.
Vi kan också använda INTERSECT ALL
, som inkluderar dubbletter av värden:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT ALL
SELECT StudentId, StudentName FROM Students;
Resultat:
teacherid | teachername -----------+------------- 6 | Bill
Detta kan också returnera samma eller olika resultat, beroende på data.