SELECT
*,
p.name AS name,
p.image,
p.price,
(
SELECT ps.price
FROM product_special ps
WHERE p.id = ps.id
AND ps.date < NOW()
ORDER BY ps.priority ASC, LIMIT 1
) AS special_price,
(
SELECT ps.date
FROM product_special ps
WHERE p.id = ps.id
AND ps.date < NOW()
ORDER BY ps.priority ASC, LIMIT 1
) AS date
FROM product p LEFT JOIN product_special ps ON (p.id = ps.id)
जैसा कि आप देख सकते हैं कि मैं एक ही कॉलम को बाहर निकालने के लिए उसी उपश्रेणी को दोहरा रहा हूं। मुझे आश्चर्य है कि ऐसा करने का एक बेहतर तरीका है?
आईडी दोनों तालिकाओं में प्राथमिक कुंजी है। अगर मुझे मदद मिल सकती है तो मुझे product_special.priority को बनाने में कोई समस्या नहीं है ।
cross apply
है (2013 में जारी) 9.3 के साथ शुरू Postgres में उपलब्ध हैं, लेकिन वे एसक्यूएल मानक का पालन और मानक का उपयोग करने के लिए चुनाlateral
ऑपरेटर। अपनी दूसरी क्वेरीleft join
left join lateral