oracle模糊查询中的regexp_like嵌套子查询用法
regexp_like一般用于模糊查询某一列时包含多个查询条件
需求1:在用户表中查询出账号包含650000和230000的用户。
select * from sys_user where regexp_like(account,'650000|230000')
以上的写法等同于下面的写法:
select * from sys_user where account like '%650000%' or account like'%230000%'
需求2:在另一张表中查询出所需条件(查询条件为另一个表的结果集),并在用户表中以该条件模糊查询对应的用户信息。
即在sys_org表中查出类型为1的orgid并以此结果在sys_user表中查询出对应的账号信息。
select fullname,account from sys_user where REGEXP_LIKE (account,(select replace(wm_concat(orgid),',','|') from (select orgid from sys_org where orgtype = '1' order by orgid )))
解决思路:
若是以此结果集进行查询会报错:“单行子查询返回多行”
1、将结果集显示成一列。所用函数:wm_concat(列名)
注:wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,即“行转列”
select wm_concat(orgid) from (select orgid from sys_org where orgtype = '1' order by orgid )
2、将结果集用 | 分隔
select replace(wm_concat(orgid),',','|') from (select orgid from sys_org where orgtype = '1' order by orgid )
3、查询条件并已完成,用 regexp_like查询出所需信息即可
select fullname,account from sys_user where REGEXP_LIKE (account,(select replace(wm_concat(orgid),',','|') from (select orgid from sys_org where orgtype = '1' order by orgid )))