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

如何编写SQL查询表A中关联表B记录仅满足条件C的主键

原有写法错误原因

你之前的SQL仅过滤了B表中不满足条件C的关联记录,只要A表主键存在任意一条满足C的关联记录就会被返回,无法排除「同时存在满足和不满足C的关联记录」的主键,因此不符合需求。


可行实现方案

方案1:GROUP BY + HAVING 统计校验(性能更优,适合数据量较大的场景)

SELECT A.id
FROM A
INNER JOIN B ON A.id = B.id_A
GROUP BY A.id
-- 校验所有关联的B表记录都满足条件C,不存在例外
HAVING COUNT(CASE WHEN B.value2 <> 'M' THEN 1 END) = 0;

逻辑说明:按A表主键分组后,统计每组中不满足条件C的记录数,统计结果为0则代表该主键对应的所有B表关联记录都符合要求。INNER JOIN自动过滤了没有B表关联记录的A表主键,完全匹配需求。

方案2:NOT EXISTS 逻辑判断(可读性更高,逻辑更直观)

SELECT DISTINCT A.id
FROM A
WHERE 
-- 保证A表主键在B表存在关联记录
EXISTS (SELECT 1 FROM B WHERE B.id_A = A.id)
-- 保证不存在任何不满足条件C的关联记录
AND NOT EXISTS (SELECT 1 FROM B WHERE B.id_A = A.id AND B.value2 <> 'M');

两种方案执行后都可以得到预期结果,仅返回id=3。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:48:02