リストを含む列を持つテーブルがあります(はい、これが正規化に違反していることはわかっています)。私は「オーバーラップ」機能のいくつかの痛みを見つけようとしています。
SELECT * FROM TABLE WHERE 'a,b,c' OVERLAP TABLE.LISTCOLUMN
したがって、LISTCOLUMN
a、b、または c のいずれかまたはすべてを含む
2つのオプション:
Oracle 10g以降を使用regexp_like
している場合は、を使用します。
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%'
ただし、すでにご存知のように、データベースを適切に正規化することで、長期的には多くの苦痛を軽減できます。
あなたは次のような意味です:
('a'、'b'、'c')のLISTCOLUMNであるTABLE1から*を選択します