特定日期多店购指定商品的SQL查询条件必要性及优化问询
解答
purchase.sID != clone.sID条件是不可或缺的
你采用自连接purchase表的方式匹配同一客户、同一商品、同一日期下的不同门店记录。如果去掉这个条件,每条purchase记录都会和自身匹配(即sID相同的情况),这样即使客户只在一家门店购买了目标商品,也会被错误查询出来,完全不符合“多家门店下单”的需求。这个条件的核心作用就是排除同门店的自匹配,确保只筛选出存在不同门店购买记录的客户。更优的查询写法
当前写法依赖笛卡尔积+WHERE关联,还需用DISTINCT去重,不仅返回了需求外的pID和sID,性能也不如分组统计写法。推荐使用GROUP BY+HAVING的方式,直接统计客户在指定日期购买目标商品的不同门店数量,当数量大于1时即为符合条件的客户:
SELECT c.cID, c.cName FROM customer c JOIN purchase p ON c.cID = p.cID JOIN product pr ON p.pID = pr.pID WHERE pr.pName = 'Onions' AND p.date = '2018-08-27' GROUP BY c.cID, c.cName HAVING COUNT(DISTINCT p.sID) > 1;
该写法逻辑直观,避免了自连接带来的大量重复数据,无需额外去重,执行效率更高,且完全贴合需求只返回必要的客户ID和名称。
内容的提问来源于stack exchange,提问作者Paradoxac
相关产品推荐
相关产品推荐

