Quando si utilizza INTERSECT di PostgreSQL operatore, se si verifica un errore che dice "ERRORE:ogni query INTERSECT deve avere lo stesso numero di colonne ", è perché c'è una mancata corrispondenza nel numero di colonne restituite dalle query su entrambi i lati di INTERSECT 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
INTERSECT
SELECT StudentId, StudentName FROM Students; Risultato:
ERROR: each INTERSECT 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
INTERSECT
SELECT StudentName FROM Students; Risultato:
teachername ------------- Bill Warren
Un'altra opzione è aggiungere la colonna pertinente al primo SELECT dichiarazione:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students; Risultato:
teacherid | teachername
-----------+-------------
6 | Bill Come dimostra questo esempio, potrebbero essere restituite righe diverse a seconda dell'opzione scelta.
Possiamo anche usare INTERSECT ALL , che include valori duplicati:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT ALL
SELECT StudentId, StudentName FROM Students; Risultato:
teacherid | teachername
-----------+-------------
6 | Bill Questo potrebbe anche restituire risultati uguali o diversi, a seconda dei dati.