Vấn đề là trong mySQL, toán tử dấu phẩy có mức độ ưu tiên thấp hơn hơn join
toán tử, do đó, product inner join (subquery) on part.id = highestcost.partid inner join (subquery) on part.id = lowestcost.partid
các liên kết được đánh giá trước phần part
bảng được kết hợp trong biểu thức, do đó thông báo lỗi.
Thay thế các toán tử dấu phẩy bằng join
đơn giản toán tử và di chuyển các điều kiện kết hợp từ where
mệnh đề on
các mệnh đề và tất cả sẽ ổn:
...
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
Nếu bạn có nhiều truy vấn như vậy trong đó bạn kết hợp toán tử dấu phẩy và các phép nối rõ ràng, thì bạn nên kiểm tra chúng vì chúng có thể tạo ra các kết quả khác nhau ngay cả khi không có lỗi cú pháp trong MySQL.