带有IN子句的group_concat中的子查询

时间:2014-05-21 05:28:54

标签: mysql

tbl_a

id  dept_id
1   1,2,3
2   2,3
3   1  

tbl_b

dept_id  dept
1        a
2        b
3        c  

我的查询:

SELECT id, (SELECT GROUP_CONCAT(dept)  FROM tbl_b
WHERE tbl_b.dept_id IN (tbl_a.dept_id)) as departments
FROM tbl_a

这只返回tbl_a.dept_id的第一个值。 我希望得到一个结果。

id      departments
1       a,b,c
2       b,c
3       a 

1 个答案:

答案 0 :(得分:3)

首先,如果可以更改结构然后normalize它,请使用存储表a的id的联结表和表b中具有一对多关系的ID,如果可以的话。 t更改架构,您可以使用find_in_set

select a.id,group_concat(b.`dept` order by b.`dept`) departments
from a 
join b on(find_in_set(b.dept_id,a.dept_id) > 0)
group by a.id

Demo