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

查询同时存在客户与访客订单的邮箱SQL解决方案

解决方案:找出同时存在访客与客户订单的邮箱

方法1:GROUP BY 结合 HAVING 条件筛选

这是最直接的实现方式,通过按邮箱分组后,检查该分组是否同时包含访客订单(CustID=0)和客户订单(CustID≠0):

SELECT Email
FROM tblOrders
GROUP BY Email
HAVING SUM(CASE WHEN CustID = 0 THEN 1 ELSE 0 END) > 0
   AND SUM(CASE WHEN CustID != 0 THEN 1 ELSE 0 END) > 0;

也可以用更简洁的逻辑,通过判断分组内CustID的范围来实现:

SELECT Email
FROM tblOrders
GROUP BY Email
HAVING MIN(CustID) = 0 AND MAX(CustID) > 0;

这个写法的逻辑是:如果分组里最小的CustID是0(说明存在访客订单),同时最大的CustID大于0(说明存在客户订单),则该邮箱符合要求。

方法2:使用 EXISTS 子查询

通过两次子查询分别验证目标邮箱是否存在访客订单和客户订单,最终取交集:

SELECT DISTINCT o1.Email
FROM tblOrders o1
WHERE EXISTS (
    SELECT 1 FROM tblOrders o2
    WHERE o2.Email = o1.Email AND o2.CustID = 0
)
AND EXISTS (
    SELECT 1 FROM tblOrders o3
    WHERE o3.Email = o1.Email AND o3.CustID != 0
);

方法3:INNER JOIN 关联两个订单子集

将访客订单的邮箱集合与客户订单的邮箱集合做内连接,直接得到同时存在两种订单的邮箱:

SELECT DISTINCT o_guest.Email
FROM tblOrders o_guest
INNER JOIN tblOrders o_customer
    ON o_guest.Email = o_customer.Email
WHERE o_guest.CustID = 0 AND o_customer.CustID != 0;

结果验证

用你提供的测试数据,以上三种方法都会返回符合预期的结果:

test@test.com
joe@blah.com

自动排除了仅存在访客订单的blah@blah.com和仅存在客户订单的mary@blah.com。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 06:47:09