0

次のテーブル構造を考えてみましょう。

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 つの値を格納するよりも良い方法があるのではないかと考えていました。

4

2 に答える 2

0

私自身の質問に答える:

ビューが実際に を選択するために、Table1 に LocalA 列を追加しましたISNULL(LocalA, Table1.A)。したがって、表示される値はデフォルトで A に等しく、A がリストを保存するときに、ユーザーは手動で上書きして特定の値を選択できます。

これが最も効率的な解決策であるかどうかはわかりませんが、少なくともビューに 2 つの列を必要とせずに機能します。

于 2013-07-01T14:00:25.093 に答える