Bei Verwendung von PostgreSQLs INTERSECT
-Operator, wenn Sie auf einen Fehler stoßen, der lautet:„FEHLER:Jede INTERSECT-Abfrage muss dieselbe Anzahl von Spalten haben “, liegt daran, dass die Anzahl der Spalten, die von den Abfragen auf beiden Seiten des INTERSECT
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
INTERSECT
SELECT StudentId, StudentName FROM Students;
Ergebnis:
ERROR: each INTERSECT 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
INTERSECT
SELECT StudentName FROM Students;
Ergebnis:
teachername ------------- Bill Warren
Eine andere Möglichkeit besteht darin, die relevante Spalte zum ersten SELECT
hinzuzufügen Aussage:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT
SELECT StudentId, StudentName FROM Students;
Ergebnis:
teacherid | teachername -----------+------------- 6 | Bill
Wie dieses Beispiel zeigt, können je nach gewählter Option unterschiedliche Zeilen zurückgegeben werden.
Wir können auch INTERSECT ALL
verwenden , die doppelte Werte enthält:
SELECT TeacherId, TeacherName FROM Teachers
INTERSECT ALL
SELECT StudentId, StudentName FROM Students;
Ergebnis:
teacherid | teachername -----------+------------- 6 | Bill
Je nach Daten kann dies auch dieselben oder unterschiedliche Ergebnisse liefern.