Het probleem is dat in mySQL de komma-operator een lagere prioriteit heeft dan de join
operator, dus de product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
joins worden vóór . geëvalueerd het part
table is toegevoegd aan de expressie, vandaar de foutmelding.
Vervang de komma-operators door eenvoudig join
operators en verplaats de samenvoegvoorwaarden van de where
clausule naar on
clausules en alles komt goed:
...
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
Als u meer van dergelijke zoekopdrachten heeft waarbij u een komma-operator en expliciete joins combineert, moet u ze eens bekijken omdat ze verschillende resultaten kunnen opleveren, zelfs als er geen syntaxisfout in MySQL was.