मुझे लगता है कि आप जो मांग रहे हैं वह आरंभिक . में शामिल होने से काम करेगा Option_A . दोनों के लिए तालिका और Option_B LEFT JOIN
का उपयोग कर रहे हैं , जो कुछ इस तरह का उत्पादन करेगा:
Initial LEFT JOIN Option_A LEFT JOIN NULL
OR
Initial LEFT JOIN NULL LEFT JOIN Option_B
उदाहरण कोड:
SELECT i.*, COALESCE(a.id, b.id) as Option_Id, COALESCE(a.name, b.name) as Option_Name
FROM Initial_Table i
LEFT JOIN Option_A_Table a ON a.initial_id = i.id AND i.special_value = 1234
LEFT JOIN Option_B_Table b ON b.initial_id = i.id AND i.special_value <> 1234
एक बार ऐसा करने के बाद, आप NULLS के सेट को 'अनदेखा' कर देते हैं। यहां अतिरिक्त चाल SELECT लाइन में है, जहां आपको यह तय करने की आवश्यकता है कि NULL फ़ील्ड के साथ क्या करना है। यदि Option_A और Option_B टेबल समान हैं, तो आप COALESCE
का उपयोग कर सकते हैं पहला NON NULL मान (उदाहरण के अनुसार) वापस करने के लिए कार्य करता है।
दूसरा विकल्प यह है कि आपको बस Option_A फ़ील्ड और Option_B फ़ील्ड को सूचीबद्ध करना होगा, और जो कुछ भी ResultSet
का उपयोग कर रहा है उसे करने दें यह निर्धारित करने के लिए कि किन क्षेत्रों का उपयोग करना है।