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

如何编写SQL脚本判断公司是否关联特定合作伙伴记录?

解决方案

先明确你的表结构:

-- company表
id  
1
2
3

-- company_partner表
id  company_id  company_name
1   1           Nike
2   1           Reebok
3   2           Nike
4   3           Nike

要实现每个公司是否存在Nike、Reebok合作伙伴的查询,你需要关联company表(确保所有公司都被展示,哪怕没有任何合作伙伴),再通过聚合逻辑生成状态列。你的尝试存在几个问题:未关联company表、错误用HAVING过滤而非生成状态、SELECT列重复。

通用SQL脚本(适配多数数据库)

SELECT 
    c.id AS company,
    CASE WHEN COUNT(CASE WHEN cp.company_name = 'Nike' THEN 1 END) > 0 THEN 'true' ELSE 'false' END AS has_nike_partner,
    CASE WHEN COUNT(CASE WHEN cp.company_name = 'Reebok' THEN 1 END) > 0 THEN 'true' ELSE 'false' END AS has_rebook_partner
FROM company c
LEFT JOIN company_partner cp ON c.id = cp.company_id
GROUP BY c.id
ORDER BY c.id;

逻辑说明

  • 用LEFT JOIN关联两张表,保证所有公司都会出现在结果中,哪怕没有任何合作伙伴
  • 内层CASE WHEN筛选出对应合作伙伴的记录,外层通过COUNT统计数量:大于0则表示存在,返回true,否则返回false
  • 按company.id分组,确保每个公司对应一行结果

优化写法(支持布尔类型的数据库,如PostgreSQL)

如果你的数据库原生支持布尔类型,用EXISTS子查询效率更高:

SELECT 
    c.id AS company,
    EXISTS(SELECT 1 FROM company_partner cp WHERE cp.company_id = c.id AND cp.company_name = 'Nike') AS has_nike_partner,
    EXISTS(SELECT 1 FROM company_partner cp WHERE cp.company_id = c.id AND cp.company_name = 'Reebok') AS has_rebook_partner
FROM company c
ORDER BY c.id;

这个写法直接判断是否存在匹配记录,返回原生布尔值,数据量大时性能更优。

内容的提问来源于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.17 13:20:30