【发布时间】:2020-12-30 19:48:24
【问题描述】:
我想搜索带有逗号分隔数据且条件为 in 的单元格。 例如,如果列值为'AAA, CCC, BBB 和 WHERE IN('AAA','BBB') 条件,我想搜索对应的行。 有没有一种有用的方法可以在 Oracle 中获得以下结果?
// 1. table data
column1 | column2
data1 | AAA,CCC,BBB
data2 | AAA,CCC
data3 | BBB,DDD,EEE
data4 | EEE,FFF,GGG
// 2. wanted result(WHERE COLUMN2 IN ('AAA', 'BBB'))
column1 | column2
data1 | AAA,CCC,BBB
data2 | AAA,CCC
data3 | BBB,DDD,EEE
【问题讨论】:
-
这是常见的操作吗?如果您有一个设计不佳的数据模型,它存储逗号分隔的列表而不是子表甚至嵌套表,您无法修复数据模型,这是您需要做一些有规律的事情,基于简单的解决方案在
like和regexp_substr上会非常慢,因为它们不能在您正在搜索的列上使用索引。有一些方法可以解决性能问题,但这通常会使 SQL 变得相当复杂。