El problema es que en mySQL el coma operator tiene menor precedencia que el join
operador, por lo tanto, el product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
las uniones se evalúan antes la part
la tabla se une a la expresión, de ahí el mensaje de error.
Reemplace los operadores de coma con simple join
operadores y mover las condiciones de combinación desde el where
cláusula a on
cláusulas y todo estará 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 tiene más consultas de este tipo en las que combina el operador de coma y las uniones explícitas, debería verificarlas porque pueden producir resultados diferentes incluso si no hubo un error de sintaxis en MySQL.