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

一对多关联表数据筛选:获取无Not Active状态的客户CID

问题分析与解决:筛选未拥有"Not Active"状态的客户CID

原SQL的问题

你的SQL逻辑完全偏离需求:

  • 需求是找从未拥有"Not Active"状态的客户,但你写的WHERE B.[Status] = 'Not Active'是在筛选存在"Not Active"状态的客户记录,方向完全相反。
  • 另外你提到执行后得到CID1、2、3,这和你贴的SQL逻辑不符——按你贴的语句,应该只会返回CID=1的那条记录,推测你实际执行的语句可能和你写的不一致。

正确的SQL写法

方法1:NOT EXISTS子查询(最直观,性能也较好)

SELECT A.[CID]
FROM [Client table] AS A
WHERE NOT EXISTS (
    SELECT 1
    FROM [Status table] AS B
    WHERE A.[CID] = B.[CID]
      AND B.[Status] = 'Not Active'
)

逻辑:遍历每个客户,判断该客户是否不存在任何一条状态为"Not Active"的记录,符合条件的就是目标客户。

方法2:LEFT JOIN + IS NULL

SELECT DISTINCT A.[CID]
FROM [Client table] AS A
LEFT JOIN [Status table] AS B
    ON A.[CID] = B.[CID]
    AND B.[Status] = 'Not Active'
WHERE B.[CID] IS NULL

逻辑:将客户表与状态为"Not Active"的记录做左连接,那些无法匹配到对应记录的客户(即B.[CID] IS NULL),就是从未拥有该状态的客户。DISTINCT用于避免重复结果(因客户表CID唯一,也可省略)。

方法3:GROUP BY + HAVING统计

SELECT CID
FROM [Status table]
GROUP BY CID
HAVING SUM(CASE WHEN [Status] = 'Not Active' THEN 1 ELSE 0 END) = 0

逻辑:按CID分组,统计每个客户下"Not Active"状态的记录数,数量为0的就是没有该状态的客户。如果需要客户表的其他字段,可再与Client表做关联查询。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:21