我正在为需要列出所有产品及其购买次数的应用程序编写查询。
我想出了这个并且它有效,但我不太确定它的优化程度。由于大量使用 ORM,我的 SQL 确实生锈了,但在这种情况下,查询是一种更优雅的解决方案。
您能发现查询中的任何错误(方法明智)吗?
SELECT products.id,
products.long_name AS name,
count(oi.order_id) AS sold
FROM products
LEFT OUTER JOIN
( SELECT * FROM orderitems
INNER JOIN orders ON orderitems.order_id = orders.id
AND orders.paid = 1 ) AS oi
ON oi.product_id = products.id
GROUP BY products.id
架构(带有相关字段)如下所示:
*orders* id, paid
*orderitems* order_id, product_id
*products* id
更新
这是针对 MySQL 的
最佳答案
我不确定“(SELECT *” ... 业务。
这执行(总是一个好的开始),我认为与发布的内容相同。
SELECT products.id,
products.long_name AS name,
count(oi.order_id) AS sold
FROM products
LEFT OUTER JOIN
orderitems AS oi
INNER JOIN
orders
ON oi.order_id = orders.id AND orders.paid = 1
ON oi.product_id = products.id
GROUP BY products.id
关于mysql - 这个查询看起来优化了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/161524/