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

ORA-00913:terlalu banyak nilai saat menggunakan case when

Saat Anda menggunakan case , Anda harus mengembalikan hanya satu catatan - tidak lebih dari 1. Untuk mencapai hasil yang Anda inginkan, saya akan menggunakan gabungan luar kiri (dengan asumsi Anda memiliki cara untuk menggabungkan table1 ke table2), tetapi tambahkan cek Anda pada table1.c1 ke dalam gabungkan kondisi sehingga nilai table2 hanya akan ada jika c1 <> '1'

select
    coalesce(table2.c1, table1.c1) c1,
    coalesce(table2.c2, table1.c2) c2,
    coalesce(table2.c3, table1.c3) c3
from table1
    left outer join table2
       on (your keys here)
           and table1.c1 <> '1' -- This gets table1 if c1 = '1';

Solusi ini mengasumsikan table1 dan table2 berhubungan. Jika Anda tidak dapat menghubungkannya, maka sepertinya Anda dapat menggunakan gabungan semua di mana Anda mengambil semua nilai dari table1 di mana c1 ='1' dan menggabungkannya ke semua baris table2. Jika perlu, Anda hanya dapat menyertakan nilai table2 jika c1 <> '1'.

select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2; -- where c1 <> '1' -- if necessary

PERBARUI

Berdasarkan data sampel dan hasil yang diharapkan, gunakan kueri kedua di atas:

select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2 where c1 <> '1'

SQL Fiddle:http://www.sqlfiddle.com/#!4/ 710f/1/0




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Groovy/Grails tidak dapat memuat Oracle.jdbc.driver.OracleDriver

  2. Instal Oracle Database Client Langkah demi Langkah

  3. Oracle mendapatkan numerik DISTINCT dengan CLOB dalam kueri

  4. Versi SQL Server dari Oracle ADD_MONTHS()

  5. Parameter OUT prosedur tersimpan Oracle