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 )))
本文介绍 Oracle 数据库中 REGEXP_LIKE 函数的应用,包括如何使用它进行复杂的模糊查询,特别是结合子查询实现动态条件匹配。通过具体案例演示了如何从一张表中获取查询条件,并应用于另一张表的模糊搜索。
2159





