MySQL查询:当Category和CatCode各存在指定值时获取Country
解决MySQL查询需求:返回同时存在指定Category和CatCode的country
嘿,针对你的需求,我整理了两种实用的MySQL查询方案,你可以根据实际场景选择:
方案一:使用EXISTS子查询(推荐,性能更优)
这种方式通过两个子查询分别验证每个country是否存在Category=4和CatCode=101的记录,逻辑清晰且在有合适索引的情况下性能很好:
SELECT DISTINCT t.country FROM your_table t WHERE EXISTS ( SELECT 1 FROM your_table WHERE country = t.country AND Category = 4 ) AND EXISTS ( SELECT 1 FROM your_table WHERE country = t.country AND CatCode = 101 );
说明:
- 把
your_table替换成你实际的数据表名称 DISTINCT用来确保同一个country只返回一次,避免重复结果- 子查询里的
SELECT 1是高效的写法,数据库不需要返回实际数据,只要确认存在记录即可
方案二:使用GROUP BY + HAVING筛选
如果你偏好分组统计的方式,也可以用这个写法:
SELECT country FROM your_table WHERE Category = 4 OR CatCode = 101 GROUP BY country HAVING COUNT(DISTINCT CASE WHEN Category = 4 THEN 1 END) > 0 AND COUNT(DISTINCT CASE WHEN CatCode = 101 THEN 1 END) > 0;
说明:
- 先筛选出所有符合Category=4或CatCode=101的记录,减少后续分组的数据量
- 通过
CASE表达式分别标记两类记录,再用COUNT统计每个country是否同时包含这两类记录 - 同样记得替换
your_table为实际表名
这两种方案都能实现你的需求,返回同时存在Category=4和CatCode=101记录的country(比如示例中的US)。
内容的提问来源于stack exchange,提问作者iamPacMan
相关产品推荐
相关产品推荐

