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

如何编写SQL查询筛选仅持有储蓄账户的客户

解决仅筛选持有储蓄账户客户的SQL问题

你的原查询只是找出了拥有储蓄账户的客户,但Jane同时持有其他类型账户,所以会被错误包含。要得到仅持有储蓄账户的客户,需要排除那些存在非储蓄账户的客户,以下是两种可行方案:

方案一:使用NOT EXISTS子查询

SELECT DISTINCT A.customer_name
FROM A.Table1 A
INNER JOIN B.Table2 B ON A.acct_number = B.acct_number
WHERE B.account_type = 'savings'
AND NOT EXISTS (
    SELECT 1
    FROM B.Table2 B2
    WHERE B2.acct_number = A.acct_number
    AND B2.account_type != 'savings'
);

逻辑说明:先筛选出有储蓄账户的客户记录,再通过NOT EXISTS排除掉同一客户名下存在非储蓄账户的情况,DISTINCT用于避免同一客户多个储蓄账户导致的重复结果。

方案二:使用分组+HAVING子句

SELECT A.customer_name
FROM A.Table1 A
INNER JOIN B.Table2 B ON A.acct_number = B.acct_number
GROUP BY A.customer_name
HAVING COUNT(DISTINCT B.account_type) = 1
AND MAX(B.account_type) = 'savings';

逻辑说明:按客户姓名分组后,通过HAVING条件限制该客户的账户类型只有1种,且这种类型是储蓄账户,这样就能确保客户没有其他类型的账户。

原查询问题说明

原查询仅过滤了账户类型为储蓄的记录,但没有校验客户是否存在其他类型账户,所以持有储蓄+其他账户的Jane会被错误返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:34:55