SQL表连接需求:如何仅保留单匹配且类别为A的记录?
解决你的SQL关联筛选问题
针对你提出的需求——关联表1(IDs)和表2(Categories),只保留每个ID仅对应一条记录且该记录CAT值为A的结果,这里有两种实用的SQL实现方案:
方案1:子查询分组统计
这种写法逻辑直观,适合快速理解需求:
SELECT c.ID, c.CAT FROM IDs i JOIN Categories c ON i.ID = c.ID WHERE c.CAT = 'A' -- 通过子查询判断当前ID在Categories中仅存在1条记录 AND (SELECT COUNT(*) FROM Categories WHERE ID = c.ID) = 1;
方案2:窗口函数(性能更优)
如果处理的是大数据量,窗口函数的写法能避免重复计算,效率更高:
WITH CatCounts AS ( SELECT ID, CAT, -- 按ID分组,统计每个ID对应的CAT总条数 COUNT(*) OVER (PARTITION BY ID) AS total_cats FROM Categories ) SELECT cc.ID, cc.CAT FROM IDs i JOIN CatCounts cc ON i.ID = cc.ID WHERE cc.CAT = 'A' AND cc.total_cats = 1;
逻辑验证
两种方案的核心逻辑一致:先锁定CAT为A的记录,再确保该ID在表2中只有唯一一条关联记录:
- ID=2、3在表2中仅存在一条CAT=A的记录,完全符合双条件,最终被保留
- ID=1有2条记录、ID=4的CAT为B、ID=5有3条记录,均不满足要求,被排除
内容的提问来源于stack exchange,提问作者GNMO11
相关产品推荐
相关产品推荐

