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

如何编写SQL查询找出关联某记录但不关联另一记录的数据

解决方法:筛选仅与Nike合作且排除Reebok合作的公司ID

下面给你几种实用的写法,都能实现需求:

方法1:NOT EXISTS 子查询

直接在原查询基础上,添加条件排除那些存在Reebok合作记录的公司:

SELECT c.id
FROM company c
INNER JOIN company_partner cp ON c.id = cp.company_id
WHERE cp.company_name = 'Nike'
  AND NOT EXISTS (
    SELECT 1
    FROM company_partner cp2
    WHERE cp2.company_id = c.id
      AND cp2.company_name = 'Reebok'
  )

逻辑:先找到所有和Nike合作的公司,再剔除掉同时和Reebok有合作记录的公司。

方法2:LEFT JOIN + IS NULL

通过左连接筛选出没有Reebok合作记录的公司,同时确保有Nike合作:

SELECT c.id
FROM company c
INNER JOIN company_partner cp_nike ON c.id = cp_nike.company_id AND cp_nike.company_name = 'Nike'
LEFT JOIN company_partner cp_reebok ON c.id = cp_reebok.company_id AND cp_reebok.company_name = 'Reebok'
WHERE cp_reebok.id IS NULL

逻辑:先关联Nike的合作记录保证公司和Nike合作,再左连Reebok的记录,只保留左连后没有匹配到Reebok数据的公司(也就是没和Reebok合作的)。

方法3:GROUP BY + HAVING 统计品牌

如果需要更灵活的筛选(比如扩展到多个品牌),可以用分组统计的方式:

SELECT c.id
FROM company c
INNER JOIN company_partner cp ON c.id = cp.company_id
GROUP BY c.id
HAVING SUM(CASE WHEN cp.company_name = 'Nike' THEN 1 ELSE 0 END) > 0
   AND SUM(CASE WHEN cp.company_name = 'Reebok' THEN 1 ELSE 0 END) = 0

逻辑:按公司分组,统计每个公司和Nike合作的次数(至少1次),同时统计和Reebok合作的次数为0次,这样就满足仅和Nike合作的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:25:37