Das Problem ist, dass in mySQL der Komma-Operator eine niedrigere Priorität als join
-Operator, daher der product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
Joins werden vorher ausgewertet der part
Tabelle wird in den Ausdruck eingebunden, daher die Fehlermeldung.
Ersetzen Sie die Kommaoperatoren durch einfaches join
Operatoren und verschieben Sie die Join-Bedingungen aus dem where
-Klausel zu on
Klauseln und alles wird gut:
...
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
Wenn Sie mehr solche Abfragen haben, bei denen Sie Kommaoperatoren und explizite Verknüpfungen mischen, sollten Sie sie überprüfen, da sie möglicherweise andere Ergebnisse liefern, selbst wenn in MySQL kein Syntaxfehler aufgetreten ist.