oracle模糊查询中的regexp_like嵌套子查询用法

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

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 )))
SELECT COUNT ( * ) FROM tb_zyp_basics_ticket_value AS ticket LEFT JOIN ( SELECT b.code_dept, array_to_string_oracle ( ARRAY ( SELECT UNNEST ( ARRAY_AGG ( ( CASE WHEN org.name_org IS NOT NULL THEN org.name_org ELSE dept.name_dept END ) ) ) ), '-' ) AS nameOrg FROM ( SELECT UNNEST ( regexp_split_to_array( custom_structure_code, '-' ) ) AS nameCode, A.code_dept FROM org_dept A ORDER BY code_dept ASC ) b LEFT JOIN org_org org ON org.code_org = b.nameCode LEFT JOIN org_dept dept ON dept.code_dept = b.nameCode GROUP BY b.code_dept ) allName ON allName.code_dept = ticket.apply_dept_code LEFT JOIN ( SELECT dict_value, "name" FROM tb_zyp_data_dict WHERE parent_id = ( SELECT "id" FROM tb_zyp_data_dict WHERE company_code = '610170010' AND dict_value = 'JobAnalysis' ) AND deleted = '0' ) AS dict1 ON ticket.ticket_type = dict1.dict_value LEFT JOIN ( SELECT dict_value, "name", '1-8' AS ticket_type FROM tb_zyp_data_dict WHERE deleted = '0' AND company_code = '610170010' AND parent_id = ( SELECT "id" FROM tb_zyp_data_dict WHERE company_code = '610170010' AND dict_value = 'fire-operation-level' ) UNION ALL SELECT dict_value, "name", '1-1' AS ticket_type FROM tb_zyp_data_dict WHERE deleted = '0' AND company_code = '610170010' AND parent_id = ( SELECT "id" FROM tb_zyp_data_dict WHERE company_code = ? AND dict_value = 'high_level' ) UNION ALL SELECT dict_value, "name", '1-2' AS ticket_type FROM tb_zyp_data_dict WHERE deleted = '0' AND company_code = '610170010' AND parent_id = ( SELECT "id" FROM tb_zyp_data_dict WHERE company_code = '610170010' AND dict_value = 'confine_level' ) ) AS dict2 ON ticket.work_level = dict2.dict_value AND ticket.ticket_type = dict2.ticket_type WHERE 1 = 1 AND ticket.com_code = '610170010' AND ticket.work_num LIKE'%' || 610170010208250827001 || '%' AND ticket.status NOT IN ( '5', '6' ) AND apply_dept_code LIKE'%' || '610170010' || '%' AND ticket.deleted = '0' 验证sql是否正确
最新发布
09-02
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值