web-dev-qa-db-ja.com

文字列の配列にカンマ区切りの文字列を含むPostgresクエリ列

次のようなデータを持つテーブルがあります。

id  oe
--  ---------------------------------------------------
 1  04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
 2  64526915083,64526953474
 3  04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
 4  F4DH8C607AA,F4DHAA
 5  F4DH8C607AA,F4DHAA
 6  04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
 7  64526915083,64526953474
 8  F4DH8C607AA,F4DHAA
 9  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
10  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
11  04715SNAA90,04715SNAA90ZZ,71501SNAA00,71501SNAA00ZZ
12  64526915083,64526953474
13  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
14  F4DH8C607AA,F4DHAA
15  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA

値の配列を渡し、その列に配列内の値のいずれかが含まれる行を返すクエリを作成するにはどうすればよいですか?

これが機能するのは、ルックアップテーブルから別の値を取得し、holテーブルのpubnet列にインデックスがないため、そのようにしたくないからです。
[DBを変更できないため、追加することはお勧めしません]

SELECT * FROM pubnet 
where hol in (select hol from id2hol where id in ('F3DH19860AA', 'F4DHAA'))

これは結果セットになります:

id  oe
--  ---------------------------------------------------
 4  F4DH8C607AA,F4DHAA
 5  F4DH8C607AA,F4DHAA
 8  F4DH8C607AA,F4DHAA
 9  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
10  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
13  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
14  F4DH8C607AA,F4DHAA
15  F3DH19860AA,F3DHAA,F4DH19860AA,F4DHAA
2
MB34

カンマ区切りの値を配列に変換する必要があります。次に、オーバーラップ演算子&&を使用できます

select *
from pubnet
where string_to_array(oe, ',') && array['F3DH19860AA', 'F4DHAA']