【问题标题】:How to use comma separated value from column to IN clause [duplicate]如何使用逗号分隔值从列到 IN 子句 [重复]
【发布时间】:2016-12-06 05:16:13
【问题描述】:

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

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 多行。

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

我想检查 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 因为它有一组固定的搜索值

【问题讨论】:

  • 我没有任何解决方案,我尝试使用连接的 regexpr 但我没有得到想要的输出。我没有任何线索可以解决它

标签: oracle


【解决方案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

【讨论】:

  • 它没有用,使用这个命令它没有返回任何东西。我的预期输出是第 2 行
  • 使用select * from my_table where instr(columnB, columnA) = 0; 来查看
  • 那也没用。我尝试了几个值,-1, 0 ,1 但 dint 工作。
  • 没用怎么办?你得到一个错误?你看到了什么?
  • 它在结果中没有给我任何行。根据上表数据,我的查询应该返回 Row#2,但使用 instr,结果有 0 行
猜你喜欢
  • 2016-01-04
  • 2013-08-03
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多