SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Fehler behoben:„SELECTs links und rechts von UNION haben nicht die gleiche Anzahl von Ergebnisspalten“ in SQLite

Wenn Sie „Fehler:in Vorbereitung, SELECTs links und rechts von UNION haben nicht die gleiche Anzahl von Ergebnisspalten …“ erhalten, wenn Sie versuchen, UNION zu verwenden Operator in SQLite, weil einer der SELECT Anweisungen gibt mehr Spalten zurück als die anderen.

Wenn Sie die UNION verwenden Operator, beide SELECT Anweisungen müssen die gleiche Anzahl von Spalten zurückgeben.

Um dieses Problem zu beheben, stellen Sie sicher, dass SELECT Anweisungen geben die gleiche Anzahl von Spalten zurück.

Fehlerbeispiel

Hier ist ein Beispiel für SQL-Code, der den Fehler erzeugt:

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

Ergebnis:

Error: in prepare, SELECTs to the left and right of UNION do not have the same number of result columns (1)

Hier das erste SELECT -Anweisung gibt eine Spalte zurück (TeacherName ), aber das zweite SELECT -Anweisung gibt zwei Spalten zurück (StudentId und StudentName ).

Lösung

Um dieses Problem zu beheben, stellen Sie sicher, dass sowohl SELECT Anweisungen geben die gleiche Anzahl von Spalten zurück

Mit dem obigen Beispiel können wir also entweder die zusätzliche Spalte aus unserem zweiten SELECT entfernen Aussage:

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

Ergebnis:

TeacherName
-----------
Ben        
Bill       
Cathy      
Ein        
Faye       
Jet        
Spike      
Warren     

Oder wir können dem ersten SELECT eine weitere Spalte hinzufügen Aussage:

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

Ergebnis:

TeacherId  TeacherName
---------  -----------
1          Faye       
1          Warren     
2          Ben        
2          Jet        
3          Cathy      
3          Spike      
4          Cathy      
4          Ein        
5          Bill       
5          Warren     
6          Bill       

Beachten Sie, dass Sie je nach gewählter Option unterschiedliche Ergebnisse erhalten können. Dies liegt daran, dass UNION gibt standardmäßig unterschiedliche Zeilen zurück. Wenn wir eine weitere Spalte hinzufügen, besteht die Möglichkeit, dass eine zuvor duplizierte Zeile jetzt zu einer eindeutigen Zeile wird, abhängig vom Wert in der zusätzlichen Spalte.

Wir können auch UNION ALL verwenden , die doppelte Werte zurückgibt:

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

Ergebnis:

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