sql - LIKE后跟子查询多个值的问题
本文介绍了sql - LIKE后跟子查询多个值的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
目前遇到一个问题是有一个表的一个A字段是从父节点到子节点的路径,类似parent1|parent1.1|parent1.1.1|parent1.1.1.1
这种,现在有个SQL语句需要这个A字段LIKE一个子查询查出的值,也就是路径里随便哪个parent匹配上这个子查询的值都要查出来,语句类似LIKE '%'||(SELECT ...)||'%'
但因为SELECT查出的值是多个,LIKE不了,所以想问问这个语句怎么实现,目前我知道能实现的只能是用UNION然后每个语句的SELECT查出一个值,不过因为这个SELECT查出好几十个,用UNION简直是不能看。
解决方案
最好能列出具体的表结构,感觉可以通过exists子查询或表关联实现,下面是一个在oracle中可以运行的例子
WITH
a AS (
SELECT 'node1|node1.1|node1.1.1' AS PATH FROM dual
UNION
SELECT 'node1|node1.1|node1.1.2' FROM dual
UNION
SELECT 'node2|node2.1|node2.1.1' FROM dual
UNION
SELECT 'node2|node2.1|node2.1.2' FROM dual
UNION
SELECT 'node3|node3.1|node3.1.1' FROM dual
),
b AS (
SELECT 'node1.1' AS sub_path FROM dual
UNION
SELECT 'node3.1' FROM dual
)
SELECT * FROM a
WHERE EXISTS (
SELECT 1 FROM b
WHERE a.path LIKE '%' || b.sub_path || '%'
)
这篇关于sql - LIKE后跟子查询多个值的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文