ORACLE 中 想多对多查询,使用了正则、递归,数据量大了,sql该怎么改,优化(不能改表结构)?
要展示(检索时录入)的一个字段是:供应商资质类型,该字段是以$$$为分隔符的多选字段,在查询时,where条件:供应商资质类型也要多选录入查询,但是要:多对多查询结果。想要结果实例:录入'材料供应商,'配件供应商' 在检索结果时所有含'材料供应商和配件供应商的结果都要检索到
我之前用了正则和递归,但是数据量大了执行时间太长,请问有什么好方法,sql怎么写之前的:WITH A AS (*)SELECT DISTINCT * FROM A WHERE (REGEXP_SUBSTR(A.供应商资质类型, '1+', 1, LEVEL) IN (''材料供应商,'配件供应商') )CONNECT BY REGEXP_SUBSTR(A.供应商资质类型, '2+', 1, LEVEL) IS NOT NULL AND PRIOR SYS_GUID() IS NOT NULL AND PRIOR ID = ID
回复
1个回答
test
2024-06-26
1.用 LIKE:
WHERE (供应商资质类型 LIKE '%材料供应商%' OR 供应商资质类型 LIKE '%配件供应商%')
2.或者用 INSTR:
WHERE (INSTR(供应商资质类型, '材料供应商') > 0 OR INSTR(供应商资质类型, '配件供应商') > 0)
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容