Problemet är att i mySQL har kommaoperatorn lägre prioritet än join
operatorn, därför product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
anslutningar utvärderas före part
tabellen är sammanfogad i uttrycket, därav felmeddelandet.
Byt ut kommaoperatorerna med enkel join
operatorer och flytta anslutningsvillkoren från where
klausul till on
klausuler och allt blir bra:
...
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
Om du har fler sådana frågor där du blandar kommaoperator och explicita kopplingar, bör du kolla upp dem eftersom de kan ge olika resultat även om det inte fanns ett syntaxfel i MySQL.