You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

特定日期多店购指定商品的SQL查询条件必要性及优化问询

解答

  1. purchase.sID != clone.sID条件是不可或缺的
    你采用自连接purchase表的方式匹配同一客户、同一商品、同一日期下的不同门店记录。如果去掉这个条件,每条purchase记录都会和自身匹配(即sID相同的情况),这样即使客户只在一家门店购买了目标商品,也会被错误查询出来,完全不符合“多家门店下单”的需求。这个条件的核心作用就是排除同门店的自匹配,确保只筛选出存在不同门店购买记录的客户。

  2. 更优的查询写法
    当前写法依赖笛卡尔积+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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 14:22:51