我有以下常规表格结构(原谅了以美国为中心的汽车制造商在我的例子中): ! m+ U: K/ ^1 {; k \1 W$ ^) SCREATE 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,视图中只有一列可以告诉我。我的第一根刺是: 3 W! B' f+ k3 M7 O4 c2 ISELECT c.CarId, case when f.FordId is not null then 'Ford' else 'Chevy' end FROM Car as cLEFT JOIN Ford as f on c.Id = f.FordIdLEFT JOIN Chevy as ch on c.Id = ch.ChevyIdWHERE (f.FordId is not null or ch.ChevyId is not null)但这会让我口中难闻,我担心表现。我会更好地独立CTE值得检索所有福特和雪佛兰,然后联合起来吗?我完全走错了轨道吗?我还需要包括Model列(以及两个子表共有的其他列)显然会把我的观点变成一系列巨大的列case语句。处理这种情况的正确方法是什么?) X8 S" A R4 q2 Q 编辑 :我想我应该补充一点,这个架构已经存在了,所以我不能改变基础表。& m; |5 N2 V! ?) ~( |6 |3 Q- l8 H