我有两个具有 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 成为永久版本,并始终增加旧材料的版本。因此,当您插入新版本时,您会说:
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) 即可插入新记录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)