समस्या यह है कि mySQL में अल्पविराम ऑपरेटर की प्राथमिकता कम होती है join
. की तुलना में ऑपरेटर, इसलिए part.id पर product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
जॉइन का मूल्यांकन पहले . किया जाता है part
तालिका अभिव्यक्ति में शामिल हो गई है, इसलिए त्रुटि संदेश।
अल्पविराम ऑपरेटरों को साधारण join
. से बदलें ऑपरेटरों और शामिल होने की शर्तों को where
. से स्थानांतरित करें on
. का खंड खंड और सब ठीक हो जाएगा:
...
FROM vendor
inner join vendorparts on vendor.id = vendorparts.vendorid
inner join part on vendorparts.partid = part.id
inner join product on product.partid = part.id
INNER JOIN (SELECT vendorparts.partid,
Max(vendorparts.lastcost) AS Highestcost
FROM vendorparts
GROUP BY vendorparts.partid) AS highestcost
ON part.id = highestcost.partid
INNER JOIN (SELECT vendorparts.partid,
Min(vendorparts.lastcost) AS Lowestcost
FROM vendorparts
GROUP BY vendorparts.partid) AS lowestcost
ON part.id = lowestcost.partid
WHERE vendorparts.lastcost <> 0
यदि आपके पास ऐसे और प्रश्न हैं जहां आप अल्पविराम ऑपरेटर और स्पष्ट जोड़ मिलाते हैं, तो आपको उन्हें देखना चाहिए क्योंकि MySQL में सिंटैक्स त्रुटि न होने पर भी वे अलग-अलग परिणाम उत्पन्न कर सकते हैं।