sql >> Databasteknik >  >> RDS >> PostgreSQL

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

När du använder PostgreSQL:s EXCEPT operatorn, om du stöter på ett fel som lyder "FEL:varje UTOM 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 EXCEPT 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
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;

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
EXCEPT
SELECT StudentName FROM Students;

Resultat:

 teachername 
-------------
 Cathy
 Ben

Ett annat alternativ är att lägga till den relevanta kolumnen i den första SELECT uttalande:

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 det här exemplet visar kan olika rader returneras beroende på vilket alternativ du väljer.

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

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

Detta kan också returnera samma eller olika resultat, beroende på data.


  1. SQL:hur man använder UNION och beställer efter ett specifikt urval?

  2. Hur får man BLOB från fil i PL/SQL?

  3. NANVL() Funktion i Oracle

  4. Kan jag skapa en databas med PDO i PHP?