如何将SQL子查询转换为连接
发布时间:2021-03-06 08:31:02 所属栏目:MsSql教程 来源:网络整理
导读:我有两个表与1:n关系:“content”和“versioned-content-data”(例如,文章实体和该文章创建的所有版本).我想创建一个显示每个“内容”的顶级版本的视图. 目前我使用此查询(使用简单的子查询): SELECT t1.id,t1.title,t1.contenttext,t1.fk_idothertable
我有两个表与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查询吗? 似乎索引视图不能包含: >子查询 我很绝望.欢迎任何其他想法:-) 非常感谢! 解决方法如果表已经在生产中,这可能无济于事,但对此进行建模的正确方法是使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(版本)以插入新记录. (编辑:泉州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql – 使用逗号分隔符将单列数据拆分为SSIS中的多个列
- 行使Internals Viewer插件查察SQL SERVER内部数据页面
- SQL Server误区:在破坏日志备份链后需要完整备份来重新开始
- 网友热评RIAA杀绝P2P 下载音乐真的有罪?
- 应用之美:仙侣奇缘之“白娘子传”电脑套装
- sql-server – 比早期版本更喜欢SQL Server 2016的客观理由
- Linux7补丁 防范ApacheWeb服务器下黑客攻击
- 电驴(emule)LowID与HighID的区别在哪?对于下载有什么影响?
- CloudIn云英:做云时代的云
- sql-server – 如何在不使用.NET的情况下从SQL Server 2008