Problemet er, at kommaoperatoren i mySQL har lavere forrang end join
operatoren, derfor product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
joins evalueres før part
tabellen er forbundet i udtrykket, deraf fejlmeddelelsen.
Erstat kommaoperatorerne med simpel join
operatører og flyt forbindelsesbetingelserne fra where
klausul til on
klausuler og alt vil være i orden:
...
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
Hvis du har flere sådanne forespørgsler, hvor du blander kommaoperator og eksplicitte joinforbindelser, så bør du tjekke dem ud, fordi de kan give forskellige resultater, selvom der ikke var syntaksfejl i MySQL.