Wanneer u een case
. gebruikt , moet je slechts één record retourneren - niet meer dan 1. Om het gewenste resultaat te bereiken, zou ik een left outer join gebruiken (ervan uitgaande dat je een manier hebt om table1 aan table2) toe te voegen, maar voeg je check op table1.c1 toe aan de join-voorwaarde zodat tabel2-waarden alleen aanwezig zouden zijn als 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';
Deze oplossing gaat ervan uit dat tabel1 en tabel2 betrekking hebben. Als je ze niet kunt relateren, klinkt het bijna alsof je een union all kunt gebruiken waarin je alle waarden uit tabel1 neemt waar c1 ='1' en die samenvoegt met alle table2-rijen. Indien nodig kunt u tabel2-waarden alleen opnemen als c1 <> '1'.
select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2; -- where c1 <> '1' -- if necessary
UPDATE
Gebruik de tweede vraag hierboven op basis van uw voorbeeldgegevens en verwachte output:
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