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

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

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.