LIKE后跟子查询多个值的问题

目前遇到一个问题是有一个表的一个A字段是从父节点到子节点的路径,类似parent1|parent1.1|parent1.1.1|parent1.1.1.1这种,现在有个SQL语句需要这个A字段LIKE一个子查询查出的值,也就是路径里随便哪个parent匹配上这个子查询的值都要查出来,语句类似LIKE '%'||(SELECT ...)||'%'但因为SELECT查出的值是多个,LIKE不了,所以想问问这个语句怎么实现,目前我知道能实现的只能是用UNION然后每个语句的SELECT查出一个值,不过因为这个SELECT查出好几十个,用UNION简直是不能看。

阅读 10.1k
1 个回答

最好能列出具体的表结构,感觉可以通过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 || '%'
)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏