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.