1

タイトルがややこしいので、何をしようとしているのかを例を挙げて説明します。

「修飾子」というフィールドがあります。これは、各個人の値が連結されたフィールドです。たとえば、1 つの行の値は次のようになります。

*26,50,4                 *

および次の行の値

*4                       *

テーブル (テーブル A) は次のようになります。

Key    Modifier
1      *26,50,4                 *
2      *4                       *
3      *1,2,3,4                 *

アスタリスクは常に同じ位置 (ここでは 1 と 26) にあり、その間に不確定な数の数字がコンマで区切られています。

私がやりたいのは、この「修飾子」フィールドを、その修飾子の可能な値のリストを持つ別のテーブル (テーブル B) に「結合」することです。たとえば、そのテーブルは次のようになります。

ID         MOD
1          26
2          3
3          50
4          78

A.modifier の値が B.mod に表示される場合、その行をテーブル A に保持します。それ以外の場合は除外します。(「結合」という用語を大まかに使用しています。それがここで必要なものかどうかわからないからです。)

これは可能ですか?どうすればいいですか?

前もって感謝します!

編集 1: 正規表現を使用して、MOD リスト内のコンマ区切り値を検索する一連の or ステートメントを実行できることを認識していますが、より良い方法はありますか?

4

1 に答える 1

0

これを行う 1 つの方法は、TRIM、文字列連結、および LIKE を使用することです。

SELECT *
FROM tableA a
WHERE EXISTS(
   SELECT 1 FROM tableB b
   WHERE   
       ','|| trim( trim( BOTH '*' FROM a.Modifier )) ||','
       LIKE  '%,'|| b.mod || ',%'
);

デモ --> http://www.sqlfiddle.com/#!4/1caa8/10

このクエリは、巨大なテーブルではまだ遅いかもしれません (常にテーブルまたはインデックスのフル スキャンを実行します)。式またはコンマ区切りのリストを個々の値に解析します。

于 2013-10-25T07:09:35.163 に答える