sql >> Database >  >> RDS >> PostgreSQL

Fix "FOUT:elke UNION-query moet hetzelfde aantal kolommen hebben" in PostgreSQL

Bij gebruik van de UNION operator in PostgreSQL, als u een fout tegenkomt die luidt:"ERROR:elke UNION-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 UNION exploitant.

Deze fout treedt op wanneer het aantal kolommen dat wordt geretourneerd door elke SELECT verklaring is anders.

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

Resultaat:

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

Of we kunnen een andere kolom toevoegen aan de eerste SELECT verklaring:

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

Het is belangrijk op te merken dat u verschillende resultaten kunt krijgen, afhankelijk van de optie die u kiest. Dit komt omdat UNION retourneert standaard verschillende rijen. Wanneer we nog een kolom toevoegen, bestaat de mogelijkheid dat een eerder dubbele rij nu een unieke rij wordt, afhankelijk van de waarde in de extra kolom.

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

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

Dit kan ook andere resultaten opleveren voor de andere voorbeelden.


  1. Hoe te voorkomen dat Activity Monitor de prestaties van uw SQL Server schaadt?

  2. ORA-12557 TNS:protocoladapter niet laadbaar

  3. Hoe de sortering van een kolom in MySQL te tonen

  4. Nieuw gebruikers- en LDAP-beheer in ClusterControl 1.8.2