加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

怎样将SQL子查询转换为毗连

发布时间:2021-03-06 12:54:51 所属栏目:编程 来源:网络整理
导读:我有两个表与1:n相关:“content”和“versioned-content-data”(譬喻,文章实体和该文章建设的全部版本).我想建设一个表现每个“内容”的顶级版本的视图. 今朝我行使此查询(行使简朴的子查询): SELECT t1.id,t1.title,t1.contenttext,t1.fk_idothertable t1

我有两个表与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(版本)以插入新记录.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读