Khi bạn sử dụng case
, bạn chỉ phải trả về một bản ghi duy nhất - không nhiều hơn 1. Để đạt được kết quả mong muốn, tôi sẽ sử dụng một phép nối bên ngoài bên trái (giả sử bạn có cách nối table1 với table2), nhưng thêm dấu kiểm của bạn trên table1.c1 vào tham gia điều kiện để các giá trị table2 sẽ chỉ hiện diện nếu 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';
Giải pháp này giả định table1 và table2 có quan hệ với nhau. Nếu bạn không thể liên kết chúng, thì có vẻ như bạn có thể sử dụng liên hợp tất cả, trong đó bạn lấy tất cả các giá trị từ table1 trong đó c1 ='1' và liên kết chúng với tất cả các hàng của table2. Nếu cần, bạn chỉ có thể bao gồm các giá trị table2 nếu c1 <> '1'.
select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2; -- where c1 <> '1' -- if necessary
CẬP NHẬT
Dựa trên dữ liệu mẫu và kết quả mong đợi của bạn, vui lòng sử dụng truy vấn thứ hai ở trên:
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