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.