如何使用逗号分隔值从列到IN子句

时间:2016-12-05 19:08:29

标签: oracle

我有一个表,其中包含以下值(小数据):

Row#| Column A | Column B
--------------------------
1   |A         | A,B
2   |C         | A,D
3   |M         | Z
4   |C         |A,B,L
5   |F         |F
6   |C         |O

列表一直在继续。 A列和B列由其他应用程序填充,因此其组合不可预测。表有超过4000行。

我的搜索值不固定;我必须使用同一行的B列中的搜索值,我要在A列中查找数据。

我想检查A列的值是否在列B中。基本上将A列与B进行比较,如果在B结果中找到匹配则应跳过该行。

在上述情况下,第1行的第A列的值在B中,而第2行则不然。

我的查询应该到达所有行并将列A与B进行比较。查询应返回第1行和第5行

这个问题不同Using the "IN" clause with a comma delimited string from the output of a replace() function in Oracle SQL 因为它有固定的搜索值集

1 个答案:

答案 0 :(得分:1)

select * from my_table where instr(columnB, columnA) > 0;

示例:应包含

select * from (
    select 1 a, 'A' b, 'A,B' c from dual union all
    select 2, 'C', 'A,D' from dual ) t
where instr(c,b) > 0;

结果:

A   B   C
-----------
1   A   A,B

示例2:不应包含

select * from (
    select 1 a, 'A' b, 'A,B' c from dual union all
    select 2, 'C', 'A,D' from dual ) t
where instr(c,b) = 0;

结果:

A   B   C
-----------
2   C   A,D