अगर मैं आपके प्रश्न को सही ढंग से समझता हूं, तो products
तालिका में डिफ़ॉल्ट मूल्य और product_prices
. होगा टेबल की कोई और कीमत होगी।
आप जानना चाहते हैं कि डिफ़ॉल्ट मूल्य का उपयोग कहां किया जा रहा है, जिसका अर्थ है कि कोई अन्य मूल्य नहीं हैं। इसके लिए, left outer join
का उपयोग करें :
SELECT p.*, coalesce(pp.price, p.default_price)
FROM products p LEFT OUTER JOIN
products_prices pp
ON p.id = pp.productId
WHERE pp.price = GIVENPRICE or pp.price is null
आपकी टिप्पणी के आधार पर, आप रिकॉर्ड में डिफ़ॉल्ट कीमतों को संग्रहीत कर रहे हैं, जिसमें व्यवसाय आईडी NULL है। इस मामले में, मैं मूल्य तालिका में दो जॉइन करूंगा:
SELECT p.*, coalesce(pp.price, defpp.price)
FROM products p LEFT OUTER JOIN
products_prices pp
ON p.id = pp.productId and pp.price = GIVENPRICE left outer join
products_prices defpp
on p.id = defpp.productId and defpp.businessId is NULL
पहले जॉइन को दी गई कीमत से मेल खाने वाली कीमत मिलती है। दूसरा डिफ़ॉल्ट मूल्य प्राप्त करता है। पहला परिणाम प्रयोग किया जाता है, यदि मौजूद है, अन्यथा दूसरा प्रयोग किया जाता है।