这是场景。无论两侧的字符串顺序如何,如何利用REGEXP
模拟IN
运算符来匹配左侧和右侧的所有值。也ANSI SQL
可以使用左连接和子查询来实现解决方案。
样品表:
Parent table, Child table, Parent_Child
. 为了不在这个问题上占用更多空间,我只在这里发布一个Group_Concat Child query by Parent
.
PID NAME CHILDREN
1 dad john dave,jill,lina
2 mum sandy maryam,jack
3 dad frank henry,jill
4 mum kate maryam
5 mum jean dave
预期结果:选择让所有孩子都参与某事的家长。
PID NAME CHILDRENREXGEX
3 dad frank jill,henry
4 mum kate maryam
5 mum jean dave
这是 REGEXP SQL 解决方案:现在这里的问题是,如果左侧顺序/顺序与右侧不匹配,它不会返回正确的结果。
询问:
select
x.pid, x.name, x.children as childrenRexgex
from
(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
group by
p.pid
order by
c.name) as x
where
'dave,maryam,jill,henry' REGEXP x.children
;
因此,对于这个问题,我会欣赏两个方面:
- 无论顺序如何,将左侧的所有名称与右侧的用户定义列表匹配的最佳模式是什么?
- 使用 可以获得什么性能
REGEXP
?