SQL正则表达式的妙用
需求背景:
存在一张project表,表里面包含了字段(id,name,description,member_ids等字段)
其中member_ids表示参与了该项目的员工工号所拼接的字符串类似于:10001,10002,10003,10005
这时,如果要统计某个员工参与了的项目个数,那么有如下sql
select count(*) from project where member_ids like "%具体员工ID%"
但是,如果要统计某个部门下,所有员工参与的项目总数,那么就没办法这么写了。
这时,有两种思路:
一、是根据员工ID一条一条去查询具体员工所参与的项目ID,然后汇总所有员参与的项目ID,并且进行去重,然后求总数是多少。这种方法对于员工数量很多的部分,就得分别查询n次数据库,性能上存在问题。
二、先查出所有员工的ID,然后使用正则表达式进行查询,只需要查询一次即可获得数据
具体方法为:
1、先根据部门,查出所有该部门下的员工信息
2、将该部门下的员工ID进行字符串拼接,拼接方式为正则表达式:类似于:idsStr = "10002|10003"
3、从project表中进行查询,语句如下:
select count(*) from project where member_ids REGEXP idsStr and xxx等其他限制条件