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.