私は次の一般的なテーブル構造を持っています (私の不自然な例で米国中心の自動車メーカーを許してください):
CREATE TABLE Car (
[Id] int PRIMARY KEY
)
CREATE TABLE Ford (
[FordId] int PRIMARY KEY, --also a foreign key on Car
[Model] nvarchar(max)
)
CREATE TABLE Chevy (
[ChevyId] int PRIMARY KEY, --also a foreign key on Car
[Model] nvarchar(max)
)
これらのテーブルの上にビューを作成して、すべての Fords と Chevys を取得し、ビューに生成された列を表示してメーカーを表示したいと考えています。私の最初の刺し傷はこれでした:
SELECT
c.CarId,
case when f.FordId is not null then 'Ford' else 'Chevy' end
FROM Car as c
LEFT JOIN Ford as f on c.Id = f.FordId
LEFT JOIN Chevy as ch on c.Id = ch.ChevyId
WHERE (f.FordId is not null or ch.ChevyId is not null)
しかし、それは私の口に悪い味を残し、私はパフォーマンスが心配です. すべての Fords と Chevys を個別の CTE 値で取得し、それらに対して和集合を実行したほうがよいでしょうか? 私は完全に間違った道を進んでいますか?また、Model 列 (および 2 つの子テーブルに共通するその他のいくつかの列) を含める必要もあります。これにより、明らかに、私のビューは巨大な一連のケース ステートメントになります。そのような状況を処理する「適切な」方法は何ですか?
編集:このスキーマは既に存在するため、基になるテーブルを変更できないことを追加する必要があると思いました。