次のテーブル構造を考えてみましょう。
Table1
Table1_ID A
1 A1
2 A1;B1
と
Table2
Table2_ID Table1_ID B C
1 1 foobar barfoo
2 2 foofoo barbar
私が使用しているビューは、次のクエリで定義されています。
SELECT Table1.A, B, C
FROM Table2
INNER JOIN Table1 ON Table1.Table1_ID = Table2.Table1_ID;
A のデータの 95% は 2 文字の長さの文字列で構成されています。この場合、正常に動作します。ただし、その 5% は実際には、このフィールドの可能な値のリスト (セパレータとしてセミコロンを使用) です。
これは、ユーザーが適切なときにこれらの値から選択し、残りの時間は自動的に単一の値を使用し続けることを意味します。もちろん、これは単一INNER JOIN
の では不可能です。定数の選択値は存在できないためです。
Table2 は非常に大きく、Table1 は非常に小さいです。Table2 内の各行のローカル A フィールドを手動で埋めるのは、膨大な時間の無駄です。
SQL (より具体的には SQL Server 2008) がこれを処理する効率的な方法はありますか? フィールド内で選択されたアイテムを含むリストなどですか?
Aにリストがある場合は選択した値を格納し、Aが単一の値のみを格納する場合は空のままにする「A_ChosenValue」フィールドを追加することを計画していました。ユーザーが入力する必要があるのは 5% の時間だけです。これは問題ありません。しかし、2 つの列を使用して 1 つの値を格納するよりも良い方法があるのではないかと考えていました。