SQLite
 sql >> Database >  >> RDS >> SQLite

Correzione dell'errore:"I SELECT a sinistra ea destra di UNION non hanno lo stesso numero di colonne di risultati" in SQLite

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