1

我有一个表,其中有一列包含一个列表(是的,我知道这违反了规范化)。我试图找到一些“重叠”功能,即

SELECT * FROM TABLE WHERE 'a,b,c' OVERLAP TABLE.LISTCOLUMN 

因此,LISTCOLUMN包含 a、b 或 c 中的任何一个或全部

4

2 回答 2

1

两种选择:

使用regexp_like,如果您使用的是 Oracle 10g 或更高版本:

select *
  from my_table
 where regexp_like(listcolumn, '[abc]')

这匹配列中a b c列中的表中的所有内容。

或者,您可以执行更可怕且难以维护的操作:

select *
  from my_table
 where listcolumn like '%a%'
    or listcolumn like '%b%'
    or listcolumn like '%c%'

这是一个小SQL Fiddle来演示。

但是,正如您已经知道的那样,从长远来看,正确地规范化您的数据库将为您节省很多痛苦。

于 2012-09-04T18:36:20.880 回答
-1

你的意思是:

Select * from TABLE1 where LISTCOLUMN in ('a','b','c')

于 2012-09-04T18:09:19.797 回答