多表关联_针对查询结果筛选出符合特定条数的数据
1.需求
两表关联查询的结果如上所示;对应的数据进行分组分别有3条和2条,只需要把数量为3的数据筛选出来,得到下面的查询结果。
2.实现(使用GROUP BY+HAVING+COUNT)
两表中数据:
t_system:
t_collect_config:
step1:进行两表关联,并指定edu_code的范围;
SELECT
sys.edu_code AS eduCode,
sys.department AS eduName
FROM
t_system sys
LEFT JOIN t_collect_config config ON sys.edu_code = config.edu_code
WHERE
sys.active = 1
AND config.status = 1
AND sys.edu_code IN ( "11112222xx001", "3332222xx001" )
查询结果如下:
step2:筛选出指定条数的
HAVING
:它往往与 GROUP BY 配合使用,为聚合操作指定条件;
说到指定条件,往往最先想到的是 WHERE 子句,但 WHERE 子句只能指定行的条件,而不能指定组的条件,因此就有了 HAVING 子句,它用来指定组的条件。
SELECT
sys.edu_code AS eduCode,
count( sys.edu_code ),
sys.department AS eduName
FROM
t_system sys
LEFT JOIN t_collect_config config ON sys.edu_code = config.edu_code
WHERE
sys.active = 1
AND config.status = 1
AND sys.edu_code IN ( "11112222xx001", "3332222xx001" )
GROUP BY
sys.edu_code
HAVING
count( sys.edu_code )= 3;
查询结果:
WHERE 先过滤出行,然后 GROUP BY 对行进行分组,HAVING 再对组进行过滤,筛选出我们需要的组。