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