जब आप case
. का उपयोग करते हैं , आपको केवल एक ही रिकॉर्ड वापस करना होगा - 1 से अधिक नहीं। अपना वांछित परिणाम प्राप्त करने के लिए, मैं एक बाएं बाहरी जुड़ाव का उपयोग करूंगा (यह मानते हुए कि आपके पास तालिका 1 से तालिका 2 में शामिल होने का एक तरीका है), लेकिन तालिका 1 पर अपना चेक जोड़ें। स्थिति में शामिल हों ताकि तालिका 2 मान केवल तभी मौजूद रहे जब 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';
यह समाधान तालिका 1 मानता है और तालिका 2 संबंधित है। यदि आप उन्हें संबंधित नहीं कर सकते हैं, तो ऐसा लगता है कि आप एक संघ का उपयोग कर सकते हैं जिसमें आप तालिका 1 से सभी मान लेते हैं जहां सी 1 ='1' और उन सभी तालिका 2 पंक्तियों में संघ। यदि आवश्यक हो, तो आप केवल तालिका 2 मान शामिल कर सकते हैं यदि c1 <> '1'।
select c1, c2, c3 from table1 where c1 = '1'
union all
select c1, c2, c3 from table2; -- where c1 <> '1' -- if necessary
अपडेट करें
अपने नमूना डेटा और अपेक्षित आउटपुट के आधार पर, कृपया ऊपर दी गई दूसरी क्वेरी का उपयोग करें:
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