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

Behebung von „FEHLER:Jede INTERSECT-Abfrage muss dieselbe Anzahl von Spalten haben“ in PostgreSQL

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.