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

SQL查询问题:添加NOT EXISTS无结果,如何筛选目标客户

问题解答:筛选仅存在未完成订单的客户

你的问题出在子查询的条件customer=customer上——这里的两个customer都指向子查询内部的orders表,相当于自己和自己比较,永远为真,导致NOT EXISTS的条件永远不满足,自然查不到任何结果。

正确写法1:使用表别名关联子查询

给内外层的orders表分别起别名,明确关联同一个客户,确保子查询检查的是当前客户是否存在已完成订单:

SELECT DISTINCT o1.customer
FROM orders o1
WHERE o1.shipped = 'yes'
  AND NOT EXISTS (
    SELECT 1 
    FROM orders o2 
    WHERE o2.customer = o1.customer 
      AND o2.shipped = 'no'
  )
ORDER BY o1.customer ASC;

正确写法2:分组后用HAVING筛选

通过分组统计每个客户的订单状态,直接筛选出存在未完成订单且无已完成订单的客户,无需额外去重:

SELECT customer
FROM orders
GROUP BY customer
HAVING SUM(CASE WHEN shipped = 'yes' THEN 1 ELSE 0 END) > 0
   AND SUM(CASE WHEN shipped = 'no' THEN 1 ELSE 0 END) = 0
ORDER BY customer ASC;

注:这里注意你用shipped='yes'代表未完成订单,和常规命名逻辑(shipped='yes'通常指已完成发货)相反,如果是命名混淆,记得调整条件里的yes和no。

内容的提问来源于stack exchange,提问作者WeekendCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:07:06