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.