同じテーブル内の他のレコードへの主キーのリストを保存したいと考えています。次に、次のような選択を実行できるようにしたいと考えています。
SELECT * FROM mytable WHERE myarraycol CONTAINS '123'
Oracle には配列データ型があることがわかりました。ただし、EXISTS 関数は、要素が指定されたインデックスに存在するかどうかのみを検証するようです。特定の変数が単一の SQL クエリで配列データ型の列にあることを確認する方法はありますか?
配列データ型を使用する代わりに、「123,324,543,23432」のようなコンマ区切りの文字列として PK を格納してみました。私のクエリは次のようになりました。
SELECT * FROM mytable WHERE mystringcol LIKE '%123%'
PK '123' を含むすべてのレコードが必要な場合。これに関する問題 (とりわけ) は、別のレコードの値が「432,9912399,432」の場合、「9912399」の「123」が原因でこのレコードが表示されることです。
「LIKE」と文字列を使用してこの問題を解決できる1つの方法は、where句を次のようにすることです。
WHERE mystringcol LIKE '%,123,% OR mystringcol LIKE '%123, OR mystringcol LIKE '%,123
「123」が文字列全体の中央、最初、または最後にあるかどうかをテストしますが、それは見苦しくなり始めます。
誰かが以前にこのようなことをしたことがあり、正しい方向に向けることができますか?