sql >> Database >  >> RDS >> PostgreSQL

Fix "ERROR: elke BEHALVE query moet hetzelfde aantal kolommen hebben" in PostgreSQL

Bij gebruik van PostgreSQL's EXCEPT operator, als u een fout tegenkomt die luidt:"ERROR:elke BEHALVE 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 EXCEPT 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
EXCEPT
SELECT StudentId, StudentName FROM Students;

Resultaat:

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

Resultaat:

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

Een andere optie is om de relevante kolom toe te voegen aan de eerste SELECT verklaring:

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

Resultaat:

 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Zoals dit voorbeeld laat zien, kunnen verschillende rijen worden geretourneerd, afhankelijk van de optie die u kiest.

We kunnen ook EXCEPT ALL . gebruiken , die dubbele waarden retourneert:

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

Resultaat:

 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Dit kan ook dezelfde of verschillende resultaten opleveren, afhankelijk van de gegevens.


  1. Hoe postgresql postgresql.conf listen_addresses voor meerdere ip-adressen te configureren

  2. SQL tussen operator

  3. Oracle 11g - Hoe kan ik langzame parallelle invoegselectie optimaliseren?

  4. Hoe gegevens te herstellen van een verwijderde Docker-container? Hoe kan ik het opnieuw verbinden met de gegevens?