sql >> Databáze >  >> RDS >> Oracle

ORA-00913:příliš mnoho hodnot při použití případu kdy

Když použijete case , musíte vrátit pouze jeden záznam - ne více než 1. K dosažení požadovaného výsledku bych použil levé vnější spojení (za předpokladu, že máte způsob, jak spojit tabulku1 s tabulkou2), ale přidejte kontrolu na tabulka1.c1 do podmínku spojení, aby hodnoty tabulky2 byly přítomny pouze v případě, že 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';

Toto řešení předpokládá, že tabulka1 a tabulka2 souvisí. Pokud je nemůžete propojit, pak to zní skoro jako byste mohli použít sjednocení all, ve kterém vezmete všechny hodnoty z tabulky1, kde c1 ='1' a sjednotíte je se všemi řádky tabulky2. V případě potřeby můžete zahrnout pouze hodnoty tabulky 2, pokud c1 <> '1'.

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

AKTUALIZACE

Na základě vašich ukázkových dat a očekávaného výstupu použijte druhý dotaz výše:

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/ 710f0/1/0




  1. Veřejná synonyma vs. schéma.objektový vzor

  2. ResultSet.next je velmi pomalý, pouze pokud dotaz obsahuje omezení FIRST_ROWS nebo ROWNUM

  3. Je v SQL v pořádku, aby na sebe dvě tabulky odkazovaly?

  4. Zrychlete připojení k MySQL, abyste zkontrolovali duplicity