問題は、mySQLではcomma演算子の優先順位が低いことです> join
より 演算子、したがって、part.idのproduct inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
結合は前に評価されます part
テーブルが式に結合されているため、エラーメッセージが表示されます。
カンマ演算子を単純なjoin
に置き換えます 演算子を使用して、結合条件をwhere
から移動します on
への句 条項とすべてがうまくいくでしょう:
...
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
コンマ演算子と明示的な結合を組み合わせたクエリが他にもある場合は、MySQLで構文エラーがなかったとしても、異なる結果が生成される可能性があるため、それらをチェックする必要があります。