mysql left join on in条件怎么写

优源天下 发布于 2018/06/23 10:39
阅读 1K+
收藏 1

A表(yytx_department)科室表,有字段id,sort(排序), pid(上级科室)

B表(yytx_user)用户表,有字段ID和字段department(科室),department的的值为A表的ID值,可能有多个,表示对应多个科室,如1,2,3

需求:需要查询全部科室,以及查询该科室下有多少名医生,我的SQL语句如下:

SELECT `a`.*,count(`b`.`id`) `count` FROM `yytx_department` `a` LEFT JOIN `yytx_user` `b` ON a.id in (b.`department`) GROUP BY `a`.`id` ORDER BY `a`.`sort` ASC,`a`.`pid` ASC

 

现在有个test医生,他的department值为1,2,3

但是图片中ID为3的显示用户数量为0

如果a.id in (b.`department`) 这里改成 a.id in (1,2,3) 查询结果又是正常的。

提问:请问SQL语句要怎么优化。

加载中
0
思念断叻弦
思念断叻弦

查询用逗号分割的可以用这个函数 find_in_set() 百度下看看吧

0
思念断叻弦
思念断叻弦

SELECT `a`.*,(select count(id) from yytx_user where find_in_set(yytx_department.id,department))as `count` FROM `yytx_department ORDER BY `sort` ,`pid` ASC

清风盟哥
清风盟哥
赞,确实用find_in_set可以实现。子查询里用父查询的字段值作为条件
0
思念断叻弦
思念断叻弦

如果科室表有重复的 就再加个group by

返回顶部
顶部