MySQL LEFT JOIN查询:筛选仅包含指定CIF值的法院ID
解决方案:筛选仅包含指定CIF的法院
要精准找出仅包含CIF值008003和516561的法院(排除像ID114这类还包含其他CIF的记录),可以用两种常见的SQL写法来实现:
方法一:分组筛选法
通过分组后验证组内CIF的数量和范围,确保没有额外值:
SELECT law_court_id FROM law_court_mesul_shexs GROUP BY law_court_id HAVING -- 确认组内包含两个目标CIF SUM(CASE WHEN cif IN ('008003', '516561') THEN 1 ELSE 0 END) = 2 -- 同时确认组内没有其他额外的CIF AND COUNT(DISTINCT cif) = 2;
逻辑说明:
SUM(CASE...)统计当前法院下属于目标CIF的记录数,等于2说明两个目标CIF都存在COUNT(DISTINCT cif)确保该法院下的CIF总数正好是2,没有其他多余的CIF值
方法二:NOT EXISTS排除法
先筛选出包含目标CIF的法院,再排除那些存在其他CIF的记录:
SELECT DISTINCT l1.law_court_id FROM law_court_mesul_shexs l1 WHERE l1.cif IN ('008003', '516561') AND NOT EXISTS ( SELECT 1 FROM law_court_mesul_shexs l2 WHERE l2.law_court_id = l1.law_court_id AND l2.cif NOT IN ('008003', '516561') );
逻辑说明:
- 外层查询先锁定有目标CIF的法院
- 子查询检查当前法院是否存在不属于目标范围的CIF,用
NOT EXISTS排除这类法院,剩下的就是仅包含目标CIF的记录
这两种写法都能精准返回你需要的法院ID113,解决原查询误返回ID114的问题——原查询只检查了法院是否包含目标CIF之一,没有排除存在其他CIF的情况。
内容的提问来源于stack exchange,提问作者Ayxan Əmiraslanlı
相关产品推荐
相关产品推荐

