4

別のテーブルに基づいて動的な列名を持つビュー(ストアド プロシージャではない)を作成することはできますか? 例えば:

Code:
CodeId|Description
------------------
     1|Title
     2|Notes

Data:
DataId|Content|CodeId|GroupId
-----------------------------
     1|Title1 |     1|      1
     2|Note1  |     2|      1
     3|Title2 |     1|      2
     4|Note2  |     2|      2

Select Result:
GroupId|Title |Notes
-------------------
      1|Title1|Note1
      2|Title2|Note2

列名「Title」と「Notes」はCodeテーブルから取得されます。答えはノーだと思いますが、確認したいと思います。ありがとう!

編集:これが「危険」である可能性があることを理解しています。誰かがコードの説明を更新すると、ビューが変更され、列名に依存する SQL が壊れます。その場合、代わりに CodeId を使用できますが、これは変更できません。

4

3 に答える 3

1

最悪の場合、返された最初の行にすべての列ヘッダーがある場合に何かを行うことができると考えていました。少しトリッキーで、おそらく UNION のパフォーマンス ヒットに苦しむ必要がありますが、実行可能に思えます。

于 2010-07-09T16:52:45.153 に答える
1

EAV (Entity-Attribute-Value) モデルの危険性は数多くあり、将来、多くの頭痛の種に備えているだけです。そうは言っても、あなたの特定の質問は私には解決できるようです。警告されましたが…

これを行うには、コード テーブルにトリガーを配置します。誰かがテーブルの行の 1 つを追加、削除、または更新すると、トリガーは正しいステートメントでビューを再作成する責任を負います。

于 2010-07-09T17:48:14.897 に答える
1

データベースの値を使用して「ビューの作成」ステートメントを動的に作成し、それを実行するプログラムを、Java や C などで作成できます。

SQL ステートメントのみでそれを行う方法を探している場合、答えはおそらく「できない」ということに同意しますが、人々は常に賢い方法を考え出すので、そのようなステートメントを作成するのは気が進まないです。私が考えたことのない何か。

于 2010-07-09T16:56:13.343 に答える