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.