gpt4 book ai didi

sql - 如何将 SQL 子查询转换为联接

转载 作者:行者123 更新时间:2023-12-01 23:54:25 25 4
gpt4 key购买 nike

我有两个具有 1:n 关系的表:“内容”和“版本内容数据”(例如,文章实体和该文章创建的所有版本)。我想创建一个显示每个“内容”的顶部版本的 View 。

目前我使用此查询(带有一个简单的子查询):

SELECT    t1.id,    t1.title,    t1.contenttext,   t1.fk_idothertable   t1.versionFROM mytable as t1WHERE (version = (SELECT MAX(version) AS topversion                  FROM mytable                  WHERE (fk_idothertable = t1.fk_idothertable)))

子查询实际上是对同一个表的查询,提取特定项目的最高版本。请注意,版本化项目将具有相同的 fk_idothertable。

在 SQL Server 中,我尝试创建此查询的索引 View ,但似乎无法创建,因为索引 View 中不允许使用子查询。所以...这是我的问题...您能想出一种方法将此查询转换为某种带有 JOIN 的查询吗?

索引 View 似乎不能包含:

  • 子查询
  • 常用表表达式
  • 派生表
  • HAVING 子句

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

非常感谢!

最佳答案

如果表已经在生产中,这可能不会有帮助,但建模的正确方法是将 version = 0 设为永久版本,并始终增加旧 Material 的版本。因此,当您插入新版本时,您会说:

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) 即可插入新记录。

关于sql - 如何将 SQL 子查询转换为联接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/600943/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com