我有一个表,其中包含以下值(小数据):
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 因为它有固定的搜索值集
答案 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