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

SQL如何筛选无CustTypeKey=7关联客户的项目与DesignGroup

原有语句错误原因

你写的SQL逻辑从根上就不对:

  • 几个内连接连完之后,返回的是每个设计组下所有关联客户的配对行,加WHERE c.CustTypeKey NOT IN(7),只会把当前行恰好是7类客户的记录踢掉
  • 要是一个设计组同时挂了7类客户和其他类型客户,其他类型客户对应的配对行根本不会被这个条件过滤,最后查出来的结果自然会混进带7类客户的项目,完全达不到「完全没关联7类客户」的筛选要求。
正确写法

用NOT EXISTS做存在性判断最贴合需求,性能稳定,也不会踩空值导致结果异常的坑,语句如下:

SELECT
  p.ProjectKey,
  -- 按需添加Project表需要返回的其他字段
  dg.DesignGroupId
  -- 按需添加DesignGroup表需要返回的其他字段
FROM project AS p
INNER JOIN designgroup AS dg 
  ON p.ProjectKey = dg.ProjectKey
WHERE NOT EXISTS (
  SELECT 1
  FROM DesignGroupCustomer AS dgc
  INNER JOIN Customer AS c 
    ON dgc.CustomerKey = c.CustomerKey
  WHERE 
    dgc.DesignGroupId = dg.DesignGroupId
    AND c.CustTypeKey = 7
)

逻辑说明

  • 子查询的作用是匹配当前设计组下所有关联了7类客户的记录
  • NOT EXISTS会把所有能匹配到子查询结果的设计组全部排除:不管这个设计组关联了多少其他类型的客户,只要存在哪怕一条7类客户的关联关系,就会被过滤掉,完全匹配需求
  • 不推荐用NOT IN实现这类逻辑,一旦关联字段存在空值很容易出现结果不符合预期的问题,在关联字段建有索引的场景下,NOT EXISTS的查询效率也更优。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:45:31