【问题标题】:SQL - find all records where col like <pattern>SQL - 查找 col 喜欢 <pattern> 的所有记录
【发布时间】:2014-04-08 07:55:25
【问题描述】:

我想在一个表中找到所有匹配一个模式的记录(实际上是一个模式列表)。

SELECT * FROM TABLENAME WHERE COL1 like '%number%';

数字是一个列表,另一个表的一列中的所有值

编辑:

SELECT * FROM TABLENAME WHERE COL1 like '%<val>number</val>%';

我从 TABLE_A 获取一个列表 ID,我正在尝试查询 TABLE_B,它的列存储了数千个 xml 文件。在这些 xml 文件中,我试图寻找模式

<val>number</val> 

其中 number 在 id 列表中。

【问题讨论】:

  • 你需要更具体。
  • 请提供您的表的架构

标签: sql oracle


【解决方案1】:

使用 UNION ALL 运算符和基本连接:

SELECT t.* 
FROM TABLENAME t
JOIN(
   SELECT '<val>123</val>' As pattern FROM dual UNION ALL
   SELECT '<val>245</val>' FROM dual UNION ALL
   SELECT '<val>234</val>' FROM dual UNION ALL
   SELECT '<val>323</val>' FROM dual UNION ALL
   SELECT '<val>163</val>' FROM dual 
) p
ON t.col1 LIKE '%' || p.pattern || '%'

演示:http://sqlfiddle.com/#!4/a914f/2


编辑


如果有另一个表包含模式值,任务就更简单了,只需:

SELECT t.* 
FROM TABLENAME t
JOIN AnotherTable p
ON t.col1 LIKE '%' || p.pattern || '%'

演示:http://sqlfiddle.com/#!4/e0318/1

【讨论】:

  • 但是我在另一个表中有成千上万条类似 xxxx 的记录,我该如何循环它们或更简单的方法?
  • @linoox 我用另一个例子更新了我的答案。
  • 感谢 Kordirko。我还更新了我的问题,如果这样可以更好地了解问题。我将尝试针对我的问题修改您的解决方案,或者修改问题:)。使用 ids 我将创建一个类似的模式并存储在临时表中并使用您的解决方案。
猜你喜欢
  • 2017-03-21
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多