Проблемът е, че в mySQL операторът запетая има по-нисък приоритет отколкото join
оператор, следователно 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.