这是我的适度赌注:
示例表:
家长
PID NAME
1 dad john
2 mum sandy
3 dad frank
4 mum kate
5 mum jean
孩子
CID NAME
11 dave
22 maryam
33 henry
44 maryam
16 jill
17 lina
23 jack
34 jill
55 dave
父子
PID CID
1 11
1 16
1 17
2 22
3 33
4 44
2 23
5 55
3 34
询问:
select p.pid, p.name,
group_concat(c.name) as children
from parent as p
inner join parent_child as pc
on p.pid = pc.pid
join child as c
on pc.cid = c.cid
where c.name
in ('dave','henry','maryam','jill')
group by p.pid
;
结果:
PID NAME CHILDREN
1 dad john dave,jill
2 mum sandy maryam
3 dad frank henry,jill
4 mum kate maryam
5 mum jean dave
使用 REGEXP 和 GROUP_CONCAT
它比SQLin或find_in_setSQL 要好得多。我所做的更改,我将列表用作comma delimitted string;)
*但这里的问题是:必须在逗号分隔的字符串中找到 group_concat 字符串顺序。* 除非我们REGEXP提高效率 :)
询问:
select x.pid, x.name,
x.children from(
select p.pid, p.name,
group_concat(c.name) as children,
count(c.name) as counts
from parent as p
inner join parent_child as pc
on p.pid = pc.pid
join child as c
on pc.cid = c.cid
group by p.pid) as x
where 'dave,maryam,henry,jill'
REGEXP x.children
;
结果:
PID NAME CHILDREN
3 dad frank henry,jill
4 mum kate maryam
5 mum jean dave
* SQLFIDDLE