sql >> Database teknologi >  >> RDS >> PostgreSQL

Ret "FEJL: hver UNDTAGET forespørgsel skal have det samme antal kolonner" i PostgreSQL

Når du bruger PostgreSQL's EXCEPT operator, hvis du støder på en fejl, der lyder "FEJL:hver UNDTAGET 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 EXCEPT 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
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;

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

Resultat:

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

En anden mulighed er at tilføje den relevante kolonne til den første SELECT erklæring:

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 dette eksempel viser, kan forskellige rækker returneres afhængigt af hvilken mulighed du vælger.

Vi kan også bruge EXCEPT ALL , som returnerer duplikerede værdier:

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

Dette kan også returnere de samme eller forskellige resultater, afhængigt af dataene.


  1. Hvad er den sande værdi af at bringe Microsoft Access ind i din organisation?

  2. Hvordan kan SQL Workload Analysis hjælpe dig?

  3. Kør SCRIPT fra PL/SQL Block

  4. Hvornår skal man bruge SELECT ... TIL OPDATERING?