PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Behebung von „ERROR:  each UNION query must have the same number of columns“ in PostgreSQL

Bei Verwendung von UNION -Operator in PostgreSQL, wenn Sie auf einen Fehler stoßen, der lautet:„FEHLER:Jede UNION-Abfrage muss dieselbe Anzahl von Spalten haben “, liegt daran, dass die Anzahl der Spalten, die von den Abfragen auf beiden Seiten der UNION zurückgegeben werden, nicht übereinstimmt Operator.

Dieser Fehler tritt auf, wenn die Anzahl der Spalten, die von jedem SELECT zurückgegeben werden Aussage ist anders.

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

Fehlerbeispiel

Hier ist ein Codebeispiel, das den Fehler erzeugt:

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

Ergebnis:

ERROR:  each UNION query must have the same number of columns
LINE 3: SELECT StudentId, StudentName FROM Students;

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

Die Lösung besteht darin, sowohl SELECT sicherzustellen Anweisungen geben die gleiche Anzahl von Spalten zurück

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

SELECT TeacherName FROM Teachers
UNION
SELECT StudentName FROM Students;

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

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

Es ist wichtig zu beachten, 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;

Dies kann auch andere Ergebnisse als die anderen Beispiele zurückgeben.