Problém je v tom, že v mySQL má operátor čárka nižší prioritu než join
operátor, proto product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
spojení se vyhodnocují před part
tabulka je spojena ve výrazu, proto se zobrazuje chybová zpráva.
Operátory čárky nahraďte jednoduchým join
operátory a přesunout podmínky spojení z where
klauzule na on
klauzule a vše bude v pořádku:
...
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
Pokud máte více takových dotazů, kde kombinujete operátor čárky a explicitní spojení, měli byste si je zkontrolovat, protože mohou přinést různé výsledky, i když v MySQL nebyla syntaktická chyba.