Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Fehler „ORA-01789:Abfrageblock hat falsche Anzahl von Ergebnisspalten“ behoben

Wenn Sie in Oracle Database den Fehler „ORA-01789:Abfrageblock hat falsche Anzahl von Ergebnisspalten“ erhalten, liegt das wahrscheinlich daran, dass Sie versuchen, einen Operator wie UNION zu verwenden , INTERSECT , oder EXCEPT um eine zusammengesetzte Abfrage auszuführen, aber SELECT Anweisungen auf beiden Seiten des Operators geben eine unterschiedliche Anzahl von Spalten zurück.

Um dies zu beheben, stellen Sie einfach sicher, dass beide Abfragen die gleiche Anzahl von Spalten zurückgeben.

Fehlerbeispiel

Hier ist ein Codebeispiel, das den Fehler erzeugt:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;

Ergebnis:

ORA-01789: query block has incorrect number of result columns

Hier verwende ich die UNION -Operator zum Erstellen einer zusammengesetzten Abfrage. Leider erhalte ich eine Fehlermeldung, da ich in der ersten Abfrage nur eine Spalte, in der zweiten jedoch zwei Spalten eingefügt habe.

Lösung

Sie können dieses Problem beheben, indem Sie sicherstellen, dass beide Abfragen die gleiche Anzahl von Spalten zurückgeben.

Also können wir entweder dem ersten SELECT eine neue Spalte hinzufügen Aussage:

SELECT EmployeeId, EmployeeName FROM Employees
UNION
SELECT CustomerId, CustomerName FROM Customers;

Ergebnis:

MITARBEITERID MITARBEITERNAME
1 Bart
1 Mia
2 Januar
2 Rohit
3 Ava
3 Peter
4 Ava
4 Rohit
5 Monisch
6 Monisch
7 Monisch

Oder wir könnten eine der Spalten aus der zweiten Abfrage entfernen:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;

Ergebnis:

MITARBEITERNAME
Ava
Bart
Januar
Mia
Monisch
Peter
Rohit

Beachten Sie, dass Sie je nach verwendeter Option sehr unterschiedliche Ergebnisse erzielen können. Tatsächlich haben wir in unserem obigen Beispiel andere Ergebnisse erhalten.

Das liegt daran, dass die UNION Der Operator gibt eindeutige Zeilen zurück, es sei denn, er wird mit ALL angehängt Stichwort. Als wir die „ID“-Spalten einschlossen, wurden dadurch einige Zeilen deutlich, obwohl sie es nicht gewesen wären, wenn wir nur die „Name“-Spalten zurückgegeben hätten. Als wir dann die „ID“-Spalten ausschlossen, erhielten wir die eindeutigen Werte aus den „Name“-Spalten.

Wenn Sie tatsächlich doppelte Werte zurückgeben möchten, können Sie den ALL verwenden Schlüsselwort.

Daher können wir unser letztes Beispiel wie folgt modifizieren:

SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;

Ergebnis:

MITARBEITERNAME
Bart
Januar
Ava
Rohit
Monisch
Monisch
Monisch
Mia
Rohit
Peter
Ava
Monisch
Monisch