動的SQLのみ。また、多くの異なるテーブルを結合して型に基づいてCASEを使用することも可能ですが、テーブルはすべて事前に知られている必要があります。
達成しようとしていること、デザインが現在どのように見えているのか、最初にその特定のテーブルデザインを選択した理由を知っていれば、適切なデザインをお勧めします。
Say you have a table of foods:
id INT
foodtype VARCHAR(50) (right now it just contains 'hotdog' or 'hamburger')
name VARCHAR(50)
Then hotdogs:
id INT
length INT
width INT
Then hamburgers:
id INT
radius INT
thickness INT
通常、補助テーブルが1つしか存在しないようにするシステムをお勧めしますが、簡単にするために、私はそれを省略しています。
SELECT f.*, hd.length, hd.width, hb.radius, hb.thickness
FROM foods f
LEFT JOIN hotdogs hd
ON hd.id = f.id
AND f.foodtype = 'hotdog'
LEFT JOIN hamburgers hb
ON hb.id = f.id
AND f.foodtype = 'hamburger'
今、あなたはそのようなことは、テーブル名とテーブルのメタデータへのアクセスに関するSELECT DISTINCT foodtype FROM foods
与えられた一定の仮定からのコード生成(あるいはその場で非常に遅いプロトタイプの動的SQLのために)ことができることがわかります。
問題は、最終的にこのクエリの結果を消費する人は、新しいテーブルが追加されるたびに新しいカラムが表示されることに気付く必要があるということです。
したがって、質問はお客様のクライアント/データの消費者に戻ります。さまざまなタイプをどのように処理するのでしょうか?そして、同じタイプの異なるタイプが何を意味するのでしょうか?とにかく、そのような変更の相対的な影響を考慮して、新しいタイプが追加されたときに手動クエリーを変更したり、タイプごとに異なるクエリーを書くだけの欠点は何ですか?
これはデザイン上の問題のようです。実行時まで結合がわからない場合は、参照整合性をどのように強化しますか? – tomfumb