假设我有一个包含许多子类型表的超类型表。我有兴趣使它们成为不相交的子类型,因为超类型表只指向每行可能的子类型表之一。在网络上,我遇到了子类型鉴别器的描述,这是一个放入超类型表的新列,它是一个小代码(通常是一个字符),用于标识该行所属的子类型。
我在实践中找不到任何实际的例子。如果我在C#am工作,我想查询表的子类型鉴别器列,然后测试一些key-&gt;值列表([sub type discriminator] - &gt; subtype_table_name)来创建正确的SQL来加入正确的表?< / p>
或者,为此目的,SQL Server中是否已有一些视图/ SQL查询语法?
基本上,我想知道我必须在哪个级别实际执行逻辑以使鉴别器有用。
答案 0 :(得分:2)
您的查询将包含以下内容:
select *
from Root
left join Child1 on ... AND Root.Discriminator = 'C1'
left join Child2 on ... AND Root.Discriminator = 'C2'
希望SQL Server在开始从子表中读取之前评估加法连接谓词。但这并不能保证。
这种模式的好处在于它可以推广到任意查询,即使对于具有不同子类型的多行也是如此。