Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Perbaiki Kesalahan "ORA-01789:blok kueri memiliki jumlah kolom hasil yang salah"

Jika Anda mendapatkan kesalahan "ORA-01789:blok kueri memiliki jumlah kolom hasil yang salah" di Oracle Database, maka itu mungkin karena Anda mencoba menggunakan operator seperti UNION , INTERSECT , atau EXCEPT untuk menjalankan kueri gabungan, tetapi SELECT pernyataan di kedua sisi operator mengembalikan jumlah kolom yang berbeda.

Untuk memperbaikinya, cukup pastikan bahwa kedua kueri mengembalikan jumlah kolom yang sama.

Contoh Kesalahan

Berikut contoh kode yang menghasilkan kesalahan:

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

Hasil:

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

Di sini, saya menggunakan UNION operator untuk membuat kueri gabungan. Sayangnya saya mendapatkan kesalahan, karena saya hanya menyertakan satu kolom di kueri pertama, tetapi dua kolom di kueri kedua.

Solusi

Cara untuk memperbaiki masalah ini adalah memastikan kedua kueri mengembalikan jumlah kolom yang sama.

Jadi kita bisa menambahkan kolom baru ke SELECT pertama pernyataan:

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

Hasil:

EMPLOYEEID NAMA KARYAWAN
1 Bart
1 Mia
2 Jan
2 Rohit
3 Ava
3 Petrus
4 Ava
4 Rohit
5 Senin
6 Senin
7 Senin

Atau kita dapat menghapus salah satu kolom dari kueri kedua:

SELECT EmployeeName FROM Employees
UNION
SELECT CustomerName FROM Customers;

Hasil:

NAMA KARYAWAN
Ava
Bart
Jan
Mia
Senin
Petrus
Rohit

Ingatlah bahwa Anda bisa mendapatkan hasil yang sangat berbeda tergantung pada opsi yang Anda gunakan. Faktanya, kami mendapatkan hasil yang berbeda dalam contoh kami di atas.

Ini karena UNION operator mengembalikan baris yang berbeda kecuali jika ditambahkan dengan ALL kata kunci. Saat kami menyertakan kolom “ID”, ini membuat beberapa baris berbeda ketika tidak akan ada jika kami hanya mengembalikan kolom “nama”. Kemudian ketika kami mengecualikan kolom “ID”, kami mendapatkan nilai unik dari kolom “nama”.

Jika Anda benar-benar ingin nilai duplikat dikembalikan, Anda dapat menggunakan ALL kata kunci.

Oleh karena itu, kita dapat memodifikasi contoh terakhir kita sebagai berikut:

SELECT EmployeeName FROM Employees
UNION ALL
SELECT CustomerName FROM Customers;

Hasil:

NAMA KARYAWAN
Bart
Jan
Ava
Rohit
Senin
Senin
Senin
Mia
Rohit
Petrus
Ava
Senin
Senin

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. LISTAGG Query ORA-00937:bukan fungsi grup grup tunggal

  2. Bagaimana cara mengubah nilai yang dipisahkan koma menjadi baris di Oracle?

  3. Mengapa Oracle.ManagedDataAccess tidak berfungsi ketika Oracle.DataAccess berfungsi?

  4. Memilih baris kedua dari tabel menggunakan rownum

  5. ORDER BY dengan kueri dalam, memberikan ORA-00907 tanda kurung kanan yang hilang