Il problema è che in MySQL l'operatore comma ha una precedenza inferiore rispetto a join
operatore, quindi il product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
i join vengono valutati prima la part
table è unito nell'espressione, da cui il messaggio di errore.
Sostituisci gli operatori con virgola con il semplice join
operatori e sposta le condizioni di unione da where
clausola su on
clausole e tutto andrà bene:
...
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
Se hai più query di questo tipo in cui mescoli operatore virgola e join espliciti, dovresti controllarle perché potrebbero produrre risultati diversi anche se non si è verificato un errore di sintassi in MySQL.