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

Correggi "ERRORE: ogni query EXCEPT deve avere lo stesso numero di colonne" in PostgreSQL

Quando si utilizza EXCEPT di PostgreSQL operatore, se si verifica un errore che dice "ERRORE:ogni query EXCEPT deve avere lo stesso numero di colonne ", è perché c'è una mancata corrispondenza nel numero di colonne restituite dalle query su entrambi i lati di EXCEPT operatore.

Il modo per risolvere questo problema è assicurarsi che entrambi SELECT le istruzioni restituiscono lo stesso numero di colonne.

Esempio di errore

Ecco un esempio di codice che produce l'errore:

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

Risultato:

ERROR:  each EXCEPT query must have the same number of columns
LINE 3: SELECT StudentId, StudentName FROM Students;

Qui, il primo SELECT l'istruzione restituisce una colonna (TeacherName ), ma il secondo SELECT l'istruzione restituisce due colonne (StudentId e StudentName ).

Soluzione

La soluzione è garantire entrambi SELECT le istruzioni restituiscono lo stesso numero di colonne

Usando l'esempio sopra, possiamo rimuovere la colonna extra dal nostro secondo SELECT dichiarazione:

SELECT TeacherName FROM Teachers
EXCEPT
SELECT StudentName FROM Students;

Risultato:

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

Un'altra opzione è aggiungere la colonna pertinente al primo SELECT dichiarazione:

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

Risultato:

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

Come dimostra questo esempio, potrebbero essere restituite righe diverse a seconda dell'opzione scelta.

Possiamo anche usare EXCEPT ALL , che restituisce valori duplicati:

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

Risultato:

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

Questo potrebbe anche restituire risultati uguali o diversi, a seconda dei dati.