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

2023-11-26

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

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

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 成为永久版本,并始终增加旧材料的版本。因此,当您插入新版本时,您会说:

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 SQL 子查询转换为联接 的相关文章

  • SQL Server 2008R2 和创建 XML 文档

    论坛上的第一篇文章 因为我真的被这个问题困住了 以下查询正确地将有效的 XML 文档分配给 xTempXML 变量 类型为 xml 注 文档的长度 转换为varchar max 711 select xTempXML select Pres
  • T-SQL:用最新的非空值替换 NULL 的最佳方法?

    假设我有这张表 id value 1 5 2 4 3 1 4 NULL 5 NULL 6 14 7 NULL 8 0 9 3 10 NULL 我想编写一个查询来替换任何NULL值与表中最后一个不为空的值在那一栏里 我想要这个结果 id va
  • 检查两个“select”是否相等

    有没有办法检查两个 非平凡的 选择是否等效 最初我希望两个选择之间有形式上的等价 但是答案在证明 sql 查询等价性 https stackoverflow com questions 56895 proving sql query equ
  • Sequelize.js 中的自定义或覆盖连接

    我需要使用创建自定义连接条件Sequelize js http sequelizejs com使用 MSSQL 具体来说 我需要加入TableB基于一个COALESCE中的列的值TableA and TableB并最终得到这样的连接条件 L
  • sql查询获取从一月到当月的所有数据,即使没有记录

    我不擅长 sql 所以任何帮助世界都很棒 我有一个 SQL 查询 可以获取从一月到当月注册的记录 我的代码示例 SELECT DatePart YEAR p createStamp as TheYear DatePart MONTH p c
  • 意外的查询结果

    为什么我从 sql server 得到以下结果 SELECT 12 C1 CONVERT int C2 CASE WHEN THEN equal ELSE not equal END C3 Sql Server Fiddle 演示 http
  • 如何搜索例程的内容/(SP-触发函数)

    我需要在数据库内所有例程的例程主体 存储过程 函数 触发器 中搜索文本 我该怎么做 Thanks SELECT OBJECT NAME object id FROM sys sql modules WHERE definition LIKE
  • 更改列时快速删除并重新创建多个索引、视图、统计信息

    我的 项目 表中有一个 StoreNumber 列 我想将其更改为 NOT NULL 我最近清理了所有旧数据 以便不存在空条目 但是 当我执行以下语句时 由于对各种视图 索引和统计信息的多重依赖 它失败了 ALTER TABLE Proje
  • 数据库字段中的逗号分隔值

    我有一个产品表 该表中的每一行对应一个产品 并由唯一的 ID 标识 现在 每个产品都可以有多个与该产品关联的 代码 例如 Id Code 0001 IN ON ME OH 0002 ON VI AC ZO 0003 QA PS OO ME
  • 如何通过 SQL 表关联 SQL 中的实体

    我是数据库设计的初学者 我需要为项目创建数据库 我可以用面向对象的术语解释我想要做什么 值得庆幸的是 数据库专家会很友善地向我解释如何在数据库方面处理这个问题 我想创建一个与位置实体 州 城市 有关系的用户 ID 名称 实体 所以在编程语言
  • SQL Server 连接其他表中不存在的位置

    Service Asset AssetService Id Name Id Name AssetId ServiceId
  • 是否有适用于 SQL Server Express 的 SQL Server Profiler? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 是否有适用于 SQL Server Express 的 SQL Server Profiler 也许是开源的 或者也许只是一个可以帮助我查
  • SQL 连接两个没有关系的表

    我有具有相同结构的不同表 我想通过其中一列将它们连接起来 问题是他们不共享该专栏中的信息 Table 1 Type A Name Value Table 2 Type B Name Value 结果表 在单列中 nameFromA name
  • SELECT max(x) 返回 null;我怎样才能让它返回0?

    运行以下命令时如何返回 0 而不是 null SELECT MAX X AS MaxX FROM tbl WHERE XID 1 假设没有XID 1的行 or SELECT coalesce MAX X 0 AS MaxX FROM tbl
  • MYSQL从每个类别中随机选择一条记录

    我有一个数据库Items表看起来像这样 id name category int 有几十万条记录 每个item可以是 7 种不同的之一categories 对应于categories table id category 我想要一个从每个类别
  • 同时从2个表中删除?

    我正在使用 asp net 和 sql 服务器 我有 2 个表 类别和产品 在产品表中 我的categoryId 为FK 我想要做的是 当我从类别表中删除类别时 我希望该类别中的所有产品都将在产品表中删除 如何才能做到这一点 我更喜欢使用存
  • 如何在 SQL Server 中连接

    我的数据库没有特定的列 因此我通过开关在查询中创建了一个列 我需要的是将此列与数据库中的另一列连接起来 select certificateDuration DurationType case when certificateDuratio
  • 使用加权行概率从 PostgreSQL 表中选择随机行

    输入示例 SELECT FROM test id percent 1 50 2 35 3 15 3 rows 你会如何编写这样的查询 平均 50 的时间我可以获得 id 1 的行 35 的时间 id 2 的行 15 的时间 id 3 的行
  • 如何部署“SQL Server Express + EF”应用程序

    这是我第一次部署使用 SQL Server Express 数据库的应用程序 我首先使用实体 框架模型来联系数据库 我使用 Install Shield 创建了一个安装向导来安装应用程序 这些是我在目标计算机中安装应用程序所执行的步骤 安装
  • SQL 更新 - 更新选定的行

    我正在使用 SQL Server 2008 我有一个名为MYTABLE有两列 ID STATUS 我想编写一个存储过程来返回其记录STATUS是 0 但是这个存储过程必须更新STATUS返回行数为 1 如何在单个查询中执行此选择和更新操作

随机推荐

  • Xcode 6.3 两次构建所有 swift 文件

    我刚刚升级到 Xcode 6 3 并试图将编译时间减少到可管理的程度 我的项目中有大约 120 个 swift 文件 类 编译需要 2 3 分钟 我的项目还有两个测试目标 UnitTests and AutomatedTests Here
  • Django forms.DateInput 不应用 attrs 字段中给出的属性

    尝试通过 django 的 attrs 说明符应用时 占位符 类未设置表单 日期输入 表格是一个模型表单 并根据docs 采用与 TextInput 相同的参数 但多了一个可选参数 这是代码 widgets my date field fo
  • Javascript 中除法结果的四舍五入

    我正在 Javascript 中执行以下操作 0 0030 0 031 如何将结果四舍五入到任意位数 a 的最大数量是多少var将举行 现代浏览器应该支持一种称为toFixed 这是取自网络的例子 Example toFixed 2 whe
  • 裁剪和缩放 MTLTexture

    我可以创建一个新的吗MTLTexture尺寸w2 h2现有的MTLTexture region x1 y1 w1 h1 PS 我考虑过使用MTLTexture buffer makeTexture但偏移量需要是64字节 为什么 以下是您可以
  • 如何更改 joptionpane 的大小和字体?

    您可以更改 JOptionPane 文本的字体和大小吗 我尝试过 只有当我在该特定的 java 类上 运行文件 时它才有效 如果您启动整个项目 它不会更改字体 我只想更改特定的 JOptionPane 而不是全部 这是代码 UIManage
  • + 运算符如何用于合并委托?

    例如 delegate void SomeDelegate SomeDelegate a new SomeDelegate gt Console WriteLine A SomeDelegate b new SomeDelegate gt
  • Flexbox 溢出滚动条显示在主体而不是内部元素上

    问题 在使用带有溢出的 Flexbox 的全尺寸应用布局 100 宽度 100 高度 中 在 Firefox IE 或 Edge 中不会显示滚动条 它们在 Chrome 中确实显示正常 FF IE Edge 中不是在元素上设置垂直滚动条 而
  • kafka ack=all 和 min-isr

    Summary Kafka 的文档和代码注释表明 当生产者设置acks被设定为all那么只有在以下情况下才会将 ack 发送给生产者 所有同步副本都已赶上 但是代码 Partition Scala checkEnoughReplicasRe
  • “[<-.data.frame”中出现 R 错误...替换有 # 项,需要 #

    我是 R 新手 这超出了我的能力范围 下面的脚本使用两个虚拟表 结果和计数 每个表都有两列 A 和 B 我正在运行排列测试来比较 A 和 B 的结果 具体来说 我正在查看 A 和 B 的结果 计数 结果和计数都有 20 行 并且我编写了一个
  • Clojure - 埃拉托斯特尼的尾递归筛

    我在 Clojure 中实现了埃拉托斯特尼筛法 defn sieve n loop last tried 2 sift range 2 inc n if or nil last tried gt last tried n sift let
  • Readlock 和 Writelock 会导致 writer 饥饿吗?

    在解决读者写入问题时 我尝试使用ReentrantReadWriteLock 我知道所有读者可以同时获取读锁 但是写锁必须等待所有读锁被释放 如果我们有很多读者 这是否会导致作者处于饥饿状态 ReentrantReadWriteLock 可
  • Eclipse 格式化程序可以配置为在括号之间正确缩进多行吗?

    可以配置 或扩展 Eclipse 格式化程序和代码清理来添加我在以下示例中期望的缩进 public static void main String args String numbers new String one two three f
  • Android EditText 内存泄漏

    很多人注意到活动中的 EditText 即使在活动完成后也持有对活动的强引用 需要明确的是 此 EditText 位于布局内并已膨胀 因此没有设置侦听器 这仅发生在某些设备上 例如三星 Galaxy S4 Android 4 2 2 等 许
  • 通过 PhantomJS 调用时找不到模块“casper”

    我在 C xampp htdocs phantom 中安装了 PhantomJS 并且在该文件夹 C xampp htdocs casper 中安装了 CasperJS 当我尝试使用 casper 站点上运行这些示例代码时phantomjs
  • 如何检查存储函数中INSERT是否顺利?

    我正在创建一个存储函数 它应该将新行插入到表中 该表中还有一个独特的列 我如何检查一切是否顺利并且行确实已插入 如何准确检查是否找到了这个唯一的列 例如 尝试添加重复值 您可以检查 LAST INSERT ID 函数和 INSERT IGN
  • 在 SQL 中将 IN 更改为 EXISTS

    我有以下查询 select A B from table1 where A in select c from table 2 但是 现在我需要更改此查询并使用exists代替in 并且应该给出相同的结果 我的表格如下所示 table1 ta
  • 如何将使用 enquo() 创建的动态变量名称传递给 dplyr 的 mutate 进行评估?

    我正在创建一个工作流程 其中包含相同的管道步骤 重命名 选择依据 然后使用我在管道之前提供的名称来更改所有内容 我已经成功使用enquo and bang bang 重命名为我想要的字符串 然后再次选择它 但是当我到达变异步骤时 它要么重复
  • 如何让 Valgrind 显示行错误?

    如何让 Valgrind 准确显示错误发生的位置 我编译了我的程序 通过 PuTTy 在 Linux 终端上的 Windows 机器上 添加了 g 调试选项 当我运行 Valgrind 时 我得到泄漏和堆摘要 并且我肯定丢失了内存 但我从未
  • 为什么 Perl open() 文档使用两种不同的 FILEHANDLE 样式?

    The open 函数的文档显示语法open as 打开文件句柄 EXPR 打开文件句柄 模式 表达式 打开文件句柄 模式 表达式 列表 打开文件句柄 模式 参考 打开文件句柄 在下面的示例中 有一些地方使用普通的 前缀变量作为文件句柄 o
  • 如何将 SQL 子查询转换为联接

    我有两个具有 1 n 关系的表 内容 和 版本内容数据 例如 文章实体和该文章创建的所有版本 我想创建一个显示每个 内容 的顶级版本的视图 我使用这个查询 带有一个简单的子查询 SELECT t1 id t1 title t1 conten