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