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

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

Quando si utilizza UNION operatore in PostgreSQL, se si verifica un errore che dice "ERRORE:ogni query UNION deve avere lo stesso numero di colonne ", è perché c'è una mancata corrispondenza nel numero di colonne restituite dalle query su entrambi i lati di UNION operatore.

Questo errore si verifica quando il numero di colonne restituito da ogni SELECT l'affermazione è diversa.

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
UNION
SELECT StudentId, StudentName FROM Students;

Risultato:

ERROR:  each UNION 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
UNION
SELECT StudentName FROM Students;

Oppure possiamo aggiungere un'altra colonna al primo SELECT dichiarazione:

SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;

È importante notare che puoi ottenere risultati diversi a seconda dell'opzione scelta. Questo perché UNION restituisce righe distinte per impostazione predefinita. Quando aggiungiamo un'altra colonna, c'è la possibilità che una riga precedentemente duplicata ora diventi una riga univoca, a seconda del valore nella colonna extra.

Possiamo anche usare UNION ALL , che restituisce valori duplicati:

SELECT TeacherId, TeacherName FROM Teachers
UNION ALL
SELECT StudentId, StudentName FROM Students;

Questo può anche restituire risultati diversi agli altri esempi.