我有两个具有1:n关系的表:“内容”和“版本内容数据”(例如,文章实体以及该文章创建的所有版本)。我想创建一个显示每个“内容”的最高版本的视图。
当前,我使用此查询(带有一个简单的子查询):
SELECT t1.id, t1.title, t1.contenttext, t1.fk_idothertable t1.version FROM mytable as t1 WHERE (version = (SELECT MAX(version) AS topversion FROM mytable WHERE (fk_idothertable = t1.fk_idothertable)))
子查询实际上是对提取相同项目的最高版本的同一表的查询。请注意,版本化的项目将具有相同的fk_idothertable。
在SQL Server中,我尝试创建此查询的 索引视图 ,但由于 索引视图中 不允许子查询,因此似乎无法执行。所以…这是我的问题…您能想到一种使用JOIN将查询转换为某种查询的方法吗?
似乎索引视图不能包含:
我很绝望。任何其他想法,欢迎:-)
非常感谢!
如果表已经在生产中,这可能无济于事,但建模的正确方法是使version = 0为永久版本,并始终增加OLDER材质的版本。因此,当您插入新版本时,您会说:
UPDATE thetable SET version = version + 1 WHERE id = :id INSERT INTO thetable (id, version, title, ...) VALUES (:id, 0, :title, ...)
然后这个查询就是
SELECT id, title, ... FROM thetable WHERE version = 0
没有子查询,没有MAX聚合。您总是知道当前版本是什么。您无需选择max(version)即可插入新记录。