问题是关于 SQL Server 2012 上的 SQL。
背景:
有一个名为Entity的实体。
实体可以有N EntityVersion ( 1:n )。
EntityVersion可能被批准或不被批准。如果被批准ApprovedBy
,将在整个版本中分配一个属性。
要求:
要求列出所有实体的最新实体版本,但仅列出每个实体的最新批准版本。
问题:
我需要找到一种最佳方式来实现大规模解决方案的整个查询。
出于这个原因,我想到了两种可能的方法:
EntityVersion 上的IsLast标志列。每当添加新版本时,整个事务将设置
true
为新添加的版本,并且之前的最后一个版本将被分配false
.将处理每个新实体版本插入并将新版本添加到仅具有最新版本的特殊表的触发器。每当添加新版本时,都会从整个特殊表中删除以前的版本。也就是说,
SELECT
获得整个上市将非常便宜。
问题:
什么是最佳和有效的方法?您还有其他方法吗?
谢谢!
请注意,“最佳”意味着它将是可扩展的,并且可以处理数百万条记录。
更新
由于我发现一些用户在他们的答案中要求Entity
and的架构如何EntityVersion
,所以我将更好地描述它们。
实体没有文本信息:只是一个标识符和与其他实体的关系。
EntityVersion具有文本和其他信息。例如:标题、描述、作者...重要的是要提到
EntityVersion
没有来自Entity
.
最简单的解决方案是拥有类似 a 的东西SELECT DISTINCT
,它既可以定义不同的列,又可以在同一查询中选择其他列。可悲的是,据我所知,这在 SQL Server 中是不可能的(我错了吗?)。