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

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

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

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
EXCEPT
SELECT StudentId, StudentName FROM Students;

Ergebnis:

ERROR:  each EXCEPT 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
EXCEPT
SELECT StudentName FROM Students;

Ergebnis:

 teachername 
-------------
 Cathy
 Ben

Eine andere Möglichkeit besteht darin, die relevante Spalte zum ersten SELECT hinzuzufügen Aussage:

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

Ergebnis:

 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Wie dieses Beispiel zeigt, können je nach gewählter Option unterschiedliche Zeilen zurückgegeben werden.

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

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

Ergebnis:

 teacherid | teachername 
-----------+-------------
         3 | Cathy
         4 | Cathy
         1 | Warren
         5 | Bill
         2 | Ben

Je nach Daten kann dies auch dieselben oder unterschiedliche Ergebnisse liefern.