0

こんにちは、第 3 正規形で作成していない怠け者の開発者によって設計されたテーブルがあります。彼は、MM 関係を使用する代わりに、テーブルに配列を保存しました。また、アプリケーションが実行されているため、データベース スキーマを変更できません。

次のようにテーブルをクエリする必要があります。

SELECT * FROM myTable WHERE ユーザーグループ = 20

usergroup フィールドには次のようなデータが含まれます: 17,19,20 または、20 または 19 のみの場合もあります。

SELECT * FROM myTable WHERE usergroup LIKE 20 のように検索できますが、この場合、200 を含むフィールドにも一致します。

誰かアイデアはありますか?ありがとう

4

3 に答える 3

4

不適切なデータベース設計を修正します。

短期的な修正は、正しい構造の関連テーブルを追加することです。挿入および更新時に古いフィールドの情報を関連テーブルに解析するためのトリガーを追加します。次に、[既存のデータを解析する] スクリプトを記述します。これで適切にクエリを実行できますが、古いコードは壊れていません。次に、古いコードを検索して修正できます。それが完了したら、元のテーブルにコードを挿入または更新する方法を変更して、新しいテーブルを追加し、古い列を削除します。

于 2009-10-12T20:51:19.923 に答える
0

文字列として格納されているリストを含む列の値を解析するために、テーブル値のユーザー定義関数(SQL ServerではUDF、他のRDBMSでは別の名前になると確信しています)を記述します。カンマ区切りリストの各項目について、関数はテーブル結果の行を返す必要があります。このようなクエリを使用している場合は、UDFから返された結果に対してクエリを実行します。

于 2009-10-12T20:40:56.853 に答える
0

カンマ区切りのリストをテーブルに変換する関数を記述します。かなりシンプルなはずです。次に、IN()を使用できます。

于 2009-10-13T01:52:00.713 に答える