我有两个表与1:n关系:“content”和“versioned-content-data”(例如,文章实体和该文章创建的所有版本).我想创建一个显示每个“内容”的顶级版本的视图.
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查询吗?
似乎索引视图不能包含:
>子查询
>常用表表达式
>派生表
> HAVING条款
我很绝望.欢迎任何其他想法:-)
非常感谢!
解决方法
如果表已经在生产中,这可能无济于事,但对此进行建模的正确方法是使version = 0成为永久版本并始终增加OLDER材料的版本.因此,当您插入新版本时,您会说:
UPDATE thetable SET version = version + 1 WHERE id = :id INSERT INTO thetable (id,version,title,...) VALUES (:id,:title,...)
然后这个查询就是
SELECT id,... FROM thetable WHERE version = 0
没有子查询,没有MAX聚合.你总是知道当前版本是什么.您永远不必选择max(版本)以插入新记录.
原文地址:https://www.jb51.cc/mssql/84099.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。