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.