sql >> Databasteknik >  >> RDS >> PostgreSQL

Åtgärda "FEL:  varje UNION-fråga måste ha samma antal kolumner" i PostgreSQL

När du använder UNION operator i PostgreSQL, om du stöter på ett fel som lyder "FEL:varje UNION-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 UNION operatör.

Det här felet uppstår när antalet kolumner som returneras av varje SELECT uttalandet är annorlunda.

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
UNION
SELECT StudentId, StudentName FROM Students;

Resultat:

ERROR:  each UNION 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
UNION
SELECT StudentName FROM Students;

Eller så kan vi lägga till ytterligare en kolumn till den första SELECT uttalande:

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

Det är viktigt att notera att du kan få olika resultat beroende på vilket alternativ du väljer. Detta beror på att UNION returnerar distinkta rader som standard. När vi lägger till ytterligare en kolumn finns det en möjlighet att en tidigare duplicerad rad nu blir en unik rad, beroende på värdet i den extra kolumnen.

Vi kan också använda UNION ALL , som returnerar dubbletter av värden:

SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;

Detta kan också returnera olika resultat till de andra exemplen.


  1. PayPal ODBC-drivrutin

  2. GroupingError:ERROR:kolumnen måste visas i GROUP BY-satsen eller användas i en aggregerad funktion

  3. Hämta datum/tid från en Unix-tidsstämpel i SQLite

  4. Hur frigör man eventuella Postgres radlås?