SELECT op.order_id
FROM order o
JOIN order_product op
USING(order_id)
WHERE o.quantity_complete = 0
GROUP BY op.order_id
HAVING SUM(op.presale) = 0如果op.presale只包括0和1,那么在op.presale上建立索引是一个好主意吗?
发布于 2017-07-21 12:29:40
我不认为HAVING子句中的列上的索引会有任何影响。但是,您可以重写查询,将HAVING子句中的逻辑移至WHERE子句:
SELECT
op.order_id
FROM order o
INNER JOIN order_product op
ON o.order_id = op.order_id
LEFT JOIN
(
SELECT DISTINCT order_id
FROM order_product
WHERE presale <> 0
) t
ON op.order_id = t.order_id
WHERE
o.quantity_complete = 0 AND
t.order_id IS NULL -- replaces the HAVING clause
GROUP BY op.order_id这里的基本思想是连接到一个新子查询,该子查询查找至少有一个预售值不为零的所有order_id。因此,这样的匹配order_id将具有不等于零的预售总和。我对该子查询使用LEFT JOIN,然后只保留与该子查询不匹配的订单记录。
https://stackoverflow.com/questions/45228850
复制相似问题