表每类型数据检索

时间:2017-02-01 20:15:36

标签: sql database entity-framework join

我已经关注了多篇文章,这些文章主要使用Entity Framework查询来展示如何检索数据。但是,如果您考虑下面的表结构:

Table Per Type sample

如果我想使用纯SQL查找ID为2的汽车的详细信息,我是否应该使用该ID在所有继承的表中查找匹配项("二手车"和"新车"在这个例子中)?

是否不能完全扫描"二手车"我在“新车”#34;表?或者有一种方式我可以知道我必须去"新车"直接表?

或者我假设每个类型的表设计是错误的吗?

1 个答案:

答案 0 :(得分:3)

如果你想找年份,你可以这样做:

select c.*, coalesce(uc.year, nc.year) as year,
       (case when uc.id is not null then 'Used' else 'New' end) as which
from car c left join
     usedcar uc
     on c.id = uc.id left join
     newcar nc
     on c.id = nc.id
where c.id = 2;

您应该将id声明为所有表中的主键(尽管我将其命名为carId)。然后就不会进行扫描。只需索引查找。

换句话说,你的设计很好。您可能需要各种约束来确保汽车是新的或使用的,但不是两者都适用。