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