Le problème est que dans mySQL l'l'opérateur virgule a une priorité inférieure que le join
opérateur, donc la jointure interne product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
les jointures sont évaluées avant la part
table est jointe dans l'expression, d'où le message d'erreur.
Remplacez les opérateurs virgule par un simple join
opérateurs et déplacez les conditions de jointure de where
clause à on
clauses et tout ira bien :
...
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
Si vous avez plusieurs requêtes de ce type où vous mélangez l'opérateur virgule et les jointures explicites, vous devriez les vérifier car elles peuvent produire des résultats différents même s'il n'y a pas eu d'erreur de syntaxe dans MySQL.