当前位置:  开发笔记 > 数据库 > 正文

如何将SQL子查询转换为连接

如何解决《如何将SQL子查询转换为连接》经验,为你挑选了1个好方法。

我有两个表与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查询吗?

似乎索引视图不能包含:

子查询

常用表表达式

派生表

有条款

我很绝望.欢迎任何其他想法:-)

非常感谢!



1> jmucchiello..:

如果表已经在生产中,这可能无济于事,但对此进行建模的正确方法是将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(版本)以插入新记录.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有