Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Napraw błąd „ORA-01789:blok zapytania ma nieprawidłową liczbę kolumn wyników”

Jeśli otrzymujesz błąd „ORA-01789:blok zapytania ma nieprawidłową liczbę kolumn wynikowych” w bazie danych Oracle, to prawdopodobnie dlatego, że próbujesz użyć operatora, takiego jak UNION , INTERSECT lub EXCEPT aby uruchomić zapytanie złożone, ale SELECT instrukcje po obu stronach operatora zwracają inną liczbę kolumn.

Aby to naprawić, po prostu upewnij się, że oba zapytania zwracają tę samą liczbę kolumn.

Przykład błędu

Oto przykład kodu, który generuje błąd:

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

Wynik:

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

Tutaj używam UNION operator, aby utworzyć zapytanie złożone. Niestety otrzymuję błąd, ponieważ w pierwszym zapytaniu umieściłem tylko jedną kolumnę, aw drugim dwie kolumny.

Rozwiązanie

Sposobem na rozwiązanie tego problemu jest upewnienie się, że oba zapytania zwracają tę samą liczbę kolumn.

Możemy więc albo dodać nową kolumnę do pierwszego SELECT oświadczenie:

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

Wynik:

ID PRACOWNIKA NAZWA PRACOWNIKA
1 Bart
1 Mia
2 sty
2 Rohit
3 Awa
3 Piotr
4 Awa
4 Rohit
5 Pomnij
6 Pomnij
7 Pomnij

Lub możemy usunąć jedną z kolumn z drugiego zapytania:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;

Wynik:

NAZWA PRACOWNIKA
Awa
Bart
sty
Mia
Pomnij
Piotr
Rohit

Pamiętaj, że możesz uzyskać bardzo różne wyniki w zależności od używanej opcji. W rzeczywistości w powyższym przykładzie otrzymaliśmy różne wyniki.

Dzieje się tak, ponieważ UNION operator zwraca różne wiersze, chyba że jest dołączony do ALL słowo kluczowe. Kiedy uwzględniliśmy kolumny „ID”, to sprawiło, że niektóre wiersze były odrębne, gdy nie byłyby, gdybyśmy zwrócili tylko kolumny „nazwa”. Następnie, gdy wykluczyliśmy kolumny „ID”, otrzymaliśmy unikalne wartości z kolumn „name”.

Jeśli rzeczywiście chcesz, aby zwracane były zduplikowane wartości, możesz użyć ALL słowo kluczowe.

Dlatego możemy zmodyfikować nasz ostatni przykład w następujący sposób:

SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;

Wynik:

NAZWA PRACOWNIKA
Bart
sty
Awa
Rohit
Pomnij
Pomnij
Pomnij
Mia
Rohit
Piotr
Awa
Pomnij
Pomnij

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle Entity Framework — generowanie encji z tabel w innym schemacie

  2. Spring Batch ORA-08177:nie można zserializować dostępu do tej transakcji podczas uruchamiania pojedynczego zadania, poziom izolacji ZSERYLIZOWANY

  3. Metoda gromadzenia:procedura EXTEND w bazie danych Oracle

  4. Różnica między wyrocznią DATE a TIMESTAMP

  5. Jak uruchomić skrypt SQL Plus w PowerShell