MySQL:如何关联两表,过滤出满足双条件的ID-A
关联表筛选解决方案
可以通过两种常用的SQL写法实现需求,精准筛选出符合条件的ID-A=8:
方法一:直接关联双表后过滤
把TableB和TableA关联,同时满足TableB的分组条件和TableA的状态要求:
SELECT b.`ID-A` FROM TableB b JOIN TableA a ON b.`ID-A` = a.`ID-A` WHERE b.Acode = 1 AND a.StatusCode = 2 GROUP BY b.`ID-A` HAVING COUNT(*) < 3;
方法二:子查询先缩范围再关联
先从TableB里选出符合分组条件的ID-A,再和TableA关联过滤状态:
SELECT sub.`ID-A` FROM ( SELECT `ID-A` FROM TableB WHERE Acode = 1 GROUP BY `ID-A` HAVING COUNT(*) < 3 ) sub JOIN TableA a ON sub.`ID-A` = a.`ID-A` WHERE a.StatusCode = 2;
补充说明
- 两种写法都能得到你要的结果:第一种逻辑直观,一步到位;第二种先缩小TableB的结果集,数据量较大时性能更优。
- 注意
ID-A包含特殊字符,部分数据库需要用反引号(`)包裹字段名,避免语法错误。
内容的提问来源于stack exchange,提问作者Allen King
相关产品推荐
相关产品推荐

