1

OracleデータベースのテーブルAには、「ID_CLOB」というclobフィールドがあり、別のテーブルBのIDが格納されています。

例:

|              ID_CLOB               |
,15,16,17,18,19,21,23,24,25,30,32,33,

そして、ここに私の質問があります。SQLステートメントから、たとえば15という数字が「ID_CLOB」フィールドにあるかどうかを知るにはどうすればよいですか。

よろしくお願いします。

状況:

私は実際に、このdbスキーマに付属するサードパーティのアプリケーションに取り組んでいます。シナリオについて考えてみましょう。テーブルBには行ごとに個人情報があり、テーブルAには部門テーブルがあり、各行は部門であり、clobフィールドはその部門にいる人の情報を格納するために使用されます。

4

3 に答える 3

2

そのフィールドのデータの形式で、スペースのない各値の前後にコンマ区切り文字が含まれることが保証されている場合、POSITIONスカラーはそれを検出します。

SELECT * FROM A
      WHERE POSITION( ',15,', in id_clob ) > 0;

ただし、これはあまり効率的ではなく、壊れやすいものです。値とコンマの間にスペースがある場合、最初の値の前にコンマがない場合、または最後の値の後にコンマがない場合、失敗します。

他の人が指摘しているように、データベースの設計を変更する方が(可能であれば)良いでしょう。しかし、現実の世界では、それが常に可能であるとは限りません。

于 2012-10-26T17:42:08.110 に答える
1

新しいテーブルを作成することをお勧めします-

person_department
-----------------
person_id
department_id

正しくフォーマットされていないデータの1回の解析に苦労し、それをこの構造に入れます。

そうすれば、簡単にクエリを実行できます。

于 2012-10-26T17:00:14.310 に答える
0

問題のクエリを考える代わりに、DBを再設計する必要があります。あなたの構造は、データベース設計の最初の正規化形式に違反しています。

于 2012-10-26T16:48:19.267 に答える