Se ricevi "Errore:in preparazione, i SELECT a sinistra ea destra di UNION non hanno lo stesso numero di colonne dei risultati..." quando tenti di utilizzare UNION
operatore in SQLite, è perché uno dei SELECT
dichiarazioni restituisce più colonne dell'altra.
Quando usi UNION
operatore, entrambi SELECT
le istruzioni devono restituire lo stesso numero di colonne.
Per risolvere questo problema, assicurati di SELECT
le istruzioni restituiscono lo stesso numero di colonne.
Esempio di errore
Ecco un esempio di codice SQL che produce l'errore:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Risultato:
Error: in prepare, SELECTs to the left and right of UNION do not have the same number of result columns (1)
Qui, il primo SELECT
l'istruzione restituisce una colonna (TeacherName
), ma il secondo SELECT
l'istruzione restituisce due colonne (StudentId
e StudentName
).
Soluzione
Il modo per risolvere questo problema è garantire entrambi SELECT
le istruzioni restituiscono lo stesso numero di colonne
Quindi, usando l'esempio sopra, possiamo rimuovere la colonna extra dal nostro secondo SELECT
dichiarazione:
SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;
Risultato:
TeacherName ----------- Ben Bill Cathy Ein Faye Jet Spike Warren
Oppure possiamo aggiungere un'altra colonna al primo SELECT
dichiarazione:
SELECT TeacherId, TeacherName FROM Teachers
UNION
SELECT StudentId, StudentName FROM Students;
Risultato:
TeacherId TeacherName --------- ----------- 1 Faye 1 Warren 2 Ben 2 Jet 3 Cathy 3 Spike 4 Cathy 4 Ein 5 Bill 5 Warren 6 Bill
Tieni presente 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;
Risultato:
TeacherId TeacherName --------- ----------- 1 Warren 2 Ben 3 Cathy 4 Cathy 5 Bill 6 Bill 1 Faye 2 Jet 3 Spike 4 Ein 5 Warren 6 Bill