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

查看:907
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆