连接表上的 where 子句

2023-12-02

对于下表:

ROOM

+----+--------+
| ID |  NAME  |
+----+--------+
|  1 | ROOM_1 |
|  2 | ROOM_2 |
+----+--------+

房间状态

+----+---------+------+------------------------+
| ID | ROOM_ID | OPEN |          DATE          |
+----+---------+------+------------------------+
|  1 |       1 |    1 |    2000-01-01 00:00:00 |
|  2 |       2 |    1 |    2000-01-01 00:00:00 |
|  3 |       2 |    0 |    2000-01-06 00:00:00 |
+----+---------+------+------------------------+

存储的数据是最后更改状态的空间:

  • ROOM_1 于 2000 年 1 月 1 日 00:00:00 开放
  • ROOM_2 于 2000 年 1 月 1 日 00:00:00 开放
  • ROOM_2 于 2000 年 1 月 6 日 00:00:00 关闭

ROOM_1 仍然开放,ROOM_2 已关闭(自 2000 年 1 月 6 日起未开放)。如何通过连接选择实际打开的房间名称?如果我写:

SELECT ROOM.NAME 
FROM ROOM
  INNER JOIN ROOM_STATE ON ROOM.ID = ROOM_STATE.ROOM_ID
WHERE ROOM_STATE.OPEN = 1

选择 ROOM_1 和 ROOM_2 是因为ROOM_STATE with ID 2 is OPEN.

SQL 小提琴:http://sqlfiddle.com/#!9/68e8bf/3/0


在 Postgres 中,我会推荐distinct on:

select distinct on (rs.room_id) r.name, rs.*
from room_state rs join
     room r
     on rs.room_id = r.id
order by rs.room_id, rs.date desc;

distinct on特定于 Postgres。它保证每个房间的结果只有一行(这就是您想要的)。所选行是遇到的第一行,因此选择日期最大的行。

另一个有趣的方法是使用横向连接:

select r.*, rs.*
from room r left join lateral
     (select rs.*
      from room_state rs
      where rs.room_id = r.id
      order by rs.date desc
      fetch first 1 row only
     ) rs;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

连接表上的 where 子句 的相关文章

  • 如何避免应用程序停止后 docker 容器停止

    有一个带有 Postgres 服务器的 docker 容器 postgres 停止或崩溃 无关紧要 我需要检查一些环境变量和一些文件的状态 默认情况下 容器在应用程序完成后停止 我知道有一个选项可以更改 dockerfile 中的默认行为
  • 累计非重复计数

    我正在查询每天获取 uid 的累计不同计数 示例 假设有 2 个 uid 100 200 出现在日期 2016 11 01 并且它们也在第二天出现 新的 uid 300 100 200 300 出现在 2016 11 02 此时我希望商店累
  • 从一个sql服务器选择到另一个sql服务器?

    我想将一台服务器 Data Old S1 中的一个表 T1 在 DB1 中 中的数据选择到另一台服务器 Data Latest S2 中的另一个表 T2 在 DB2 中 中的数据 我怎样才能做到这一点 请注意服务器的命名方式 查询也应该考虑
  • SQLSTATE[HY000] [2002] 资源暂时不可用 - mysql - innodb 和 pdo

    在我的错误日志中得到大量结果 如下所列 数据库中的所有表都是 innodb 并且就与这些表的任何交互而言 一切都是带有准备好的语句的 pdo 正如我所说 所有错误几乎与下面列出的错误相同 但发生在几个不同的页面上 无论页面如何 错误行始终指
  • 对具有许多索引的表进行缓慢的批量插入

    我尝试将数百万条记录插入到具有 20 多个索引的表中 在上次运行中 每 100 000 行花费了 4 个多小时 并且查询在 3 5 天后被取消 您对如何加快速度有什么建议吗 我怀疑是索引太多的原因 如果你也这么认为 如何在操作前自动删除索引
  • 与 FOREIGN KEY 约束冲突

    我有两张桌子 学术界 CREATE TABLE dbo R ACADEMIE ID ACADEMIE dbo IDENTIFIANT NOT NULL LC ACADEMIE CODE dbo LIBELLE COURT NOT NULL
  • 根据 PostgreSQL 中的列将文本附加到列数据

    我想将一些文本附加到表格每一列的每个单元格中 作为该特定列的符号 例如 假设我的表如下 所有字段的类型字符不同 name age location james 45 france simon 33 usa ben 76 china 我想将其
  • 如何在 SQLite 中获取最后插入的 ID?

    SQLite 中是否有任何内置函数可以获取最后插入的行 ID 例如 在 mysql 中我们有LAST INSERT ID 这种功能 对于 sqlite 任何可用于执行相同过程的函数 请帮我 Thanks SQLite 这可以使用SQLite
  • 使用 Powershell SQL 将数据提取到 Excel

    我想使用 powershell 将数据从 SQL Server 提取到新的 excel 文件 对于小型数据集 我的代码可以工作 但某些表的行数超过 100 000 行 这将需要很长时间 我不在 SQl 服务器中使用该实用程序的原因是因为我想
  • SQL 插入失败 - 违反主键约束

    我在 SQL Insert 语句中看到一个非常奇怪的问题 我有一个简单的表 带有一个 ID 和 2 个日期时间 请参阅下面的创建脚本 CREATE TABLE dbo DATA POPULATION LOGS ID int IDENTITY
  • SQL Server递归查询显示父级路径

    我正在使用 SQL Server 语句并有一张表 例如 item value parentItem 1 2test 2 2 3test 3 3 4test 4 5 1test 1 6 3test 3 7 2test 2 我想使用 SQL S
  • 在 Doctrine DQL 中选择 count() ,并使用左连接多对多单向关系,其中用户没有关系特定组

    情况 我尝试在 DQL 中为不属于特定组的用户选择 count 标准ManyToMany之间的单向关系User and Group实体来自FOSUserBundle and SonataUserBundle 系统 Symfony 2 5 D
  • Java 中的 ExecuteUpdate sql 语句不起作用

    我正在学习如何将 SQL 与 Java 结合使用 我已成功安装 JDBC 驱动程序 并且能够从数据库读取记录并将其打印在屏幕上 我的问题发生在尝试执行更新或插入语句时 没有任何反应 这是我的代码 问题所在的方法 public static
  • 计算树中值的总和(递归查询)

    我在表员工 id name parentid 中有树结构 并且该表可以嵌套 employees 与另一个具有列 id employeeid quantity 的 Sales 表是一对多关系 每个员工都有销售数量 我想计算每个员工以及儿童员工
  • PHP json_encode 反斜杠和数组名称的问题

    我正在将一些 postgresql 数据转换为 PHP json encode 但我遇到了一些问题 json encode 将 BackSlash 添加到我的数据中的所有斜杠中 在描述中出现段落标记的结束 我认为是因为反斜杠问题 我不希望我
  • Psycopg / Postgres:连接随机挂出

    我正在使用 psycopg2 作为我当前正在开发的cherrypy 应用程序 并使用 cli 和 phpgadmin 来手动处理一些操作 这是Python代码 One connection per thread cherrypy threa
  • 如何在没有聚合函数的情况下在sql server中创建枢轴查询

    我正在使用 MS SQL SERVER 2008 并且有以下数据 select from account PERIOD ACCOUNT VALUE 2000 Asset 205 2000 Equity 365 2000 Profit 524
  • PDO 连接字符串:最好的方法是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我想使用 php pdo 制作一个后端应用程序 我发现了很多不同的方法来处理 PDO 连接字符串 我想知道使用 pdo 执行连接字符串的最佳方法
  • 当您执行“SELECT *”时,SQL Server 如何确定列的顺序?

    当您执行以下操作时 SQL Server 如何确定列的顺序SELECT 我知道 订购依据 对于订购至关重要data 但我预计列名保持一致 注意 我的代码是not取决于返回列的实际顺序 我只想知道 SQL Server 如何决定对列名进行排序
  • PostgreSQL:循环直到条件为真

    我正在尝试编写一个查询 该查询从指定值开始 循环 数据库 直到条件为真 例如 假设我在 TABLE 示例中有以下条目 id parent cond 1 True 2 1 False 3 1 False 4 2 False 我想要一个以 4

随机推荐

  • 向结构化numpy数组添加字段(3)

    这个问题已经被问过并回答过多次 here and here 例如 显然该函数已在 numpy 1 6 1 中移动 没有更多了numpy lib recfunctions 虽然我可以按照之前的帖子中指定的方式实现我自己的 但我会really而
  • 如何在连接字段中使用逗号分隔列表连接两个表

    我有两张桌子 categories and movies In movies表我有一列categories 该列包含电影所属的类别 类别是用逗号分隔的 ID 这是一个例子 Table categories id name 1 Action
  • Spark 无法找到 JDBC 驱动程序

    因此 我一直在使用 sbt 和 assembly 将所有依赖项打包到一个 jar 中以用于我的 Spark 作业 我有几份工作正在使用c3p0设置连接池信息 将其广播出去 然后使用foreachPartition然后在 RDD 上获取连接
  • 如何在 DBX 中使用连接池?

    Well 我设法让代表驱动程序正确设置 但连接池仍然给我带来很多麻烦 从文档中给出的描述来看 连接池似乎应该像这样工作 在单个全局 Connection 对象上设置 DBXPool 驱动程序委托 将此 Connection 对象用于对数据库
  • 这似乎是一个关于 Javascript 事件的类。它是什么?

    我刚刚遇到了一些看起来像这样的 jQuery add row live click add function do something 这似乎与 点击 添加 事件 我自己使用自定义事件并认为它们很棒 但是git grep我们的代码库上没有显
  • 替换终端中的多行字符串

    我正在尝试编写一些代码来覆盖其之前的输出 例如原始输出是 1 但是 1 被替换为 2 这使得它看起来好像 1 一开始就没有被输出过 我有一个名为的列表列表board 我使用以下代码将此列表转换为多行字符串 rendered board fo
  • JavaScript:在选项卡之间共享数据[重复]

    这个问题在这里已经有答案了 在浏览器中打开的选项卡之间共享数据的最佳方式是什么 如需更现代的解决方案 请查看这个答案引述如下 我坚持使用问题中提到的共享本地数据解决方案localStorage 就可靠性 效率和浏览器兼容性而言 它似乎是最好
  • 为什么 '$_' 与 Perl 单行代码中的 $ARGV 相同?

    我在尝试在 Perl 单行代码中打印单引号时遇到了这个问题 我最终发现你必须逃离他们 这是一些代码来说明我的问题 让我们从打印文本文件开始 perl ne chomp print n shortlist txt red orange yel
  • 在C语言中如何使用scanf获取int?

    我正在尝试了解从控制台获取输入的不同方法的优点和缺点 我很困惑scanf 为什么我需要使用use favNumber代替favNumber 我明白那个 favNumber是地址位置favNumber 但是为什么要这样做呢 我觉得这里有一个类
  • 无法在 macOS 应用程序的 Xcode 9 中测试应用内购买

    自 iOS11 发布以来 测试应用内购买一直是一件痛苦的事 如果不是不可能的话 虽然我在这里找到了在 iOS 上测试的一个很好的解决方法 https stackoverflow com a 46467498 4514671我找不到 macO
  • 从 SELECT 中的多个选择中获取值

    我有一个选择框 允许您选择多个选项 我需要使用 JavaScript 访问所有选定的值 可能是值数组 这是获取所选值数组的最佳方法 mySelect val Return an array of the selected options v
  • 升级到 python 3.0 的提示? [复制]

    这个问题在这里已经有答案了 因此 随着 Python 3 0 现在是 3 1 的最终版本 很多人都面临着如何升级而不因向后不兼容而丢失一半代码库的担忧 人们有哪些最佳技巧可以避免切换到下一代 Python 时几乎不可避免地出现的许多陷阱 也
  • FFmpeg - PHP 错误代码 127

    我正在尝试从 php 执行 FFmpeg 我已经安装了FFmpeg php 并且扩展位于modules目录中 并且它显示在phpinfo中 FFmpeg 工作正常 因为我可以在终端中运行命令并输出视频 但是 当我尝试使用以下脚本从 php
  • 检查 SharePoint 365 中的工作簿是否已锁定进行编辑

    我在 SharePoint 365 中有一个文档库 我使用本地 Excel 宏文件通过 VBA 在线打开 SharePoint 中的工作簿 这适用于类似的代码 location https mycompany sharepoint com
  • 尝试使用 Python 和 Selenium 迭代地滚动和抓取网页

    我最近问了一个问题 参考这里 Python Web 抓取 Beautiful Soup Selenium 和 PhantomJS 仅抓取整个页面的一部分 这有助于确定我在抓取滚动时动态更新的页面的所有内容时遇到的问题 然而 我仍然无法使用
  • 使用pip在django中安装错误

    我是 Django 世界的新手 我想将其从 pip 安装到我的 Windows 中 但在安装时出现此错误 C Users xxxx gt pip install django Collecting django Could not inst
  • 在 Jdbc 中执行带有绑定变量的 SQL 查询

    我有一个这样的sql查询 select DEPT DEPTNO as DEPTNO1 DEPT DNAME as DNAME1 DEPT LOC as LOC1 EMP COMM as COMM1 EMP EMPNO as EMPNO1 E
  • Android:在 webview 中下载在 Oreo 中不起作用,它在 Oreo 设备中强制关闭

    下载管理器代码在 Android 中不起作用WebView适用于 Oreo 设备 但它适用于旧版本 如果不是 Oreo 设备 它会提示 正在下载文件 并被下载 但如果是 Oreo 它会强制关闭 崩溃 下面是我正在使用的代码 片段 webVi
  • 数字后跟大写 L

    什么是512L意思是 或者可能是任何数字后跟大写 L example uint sec然后是一些带有表达式的代码 sec 512L 取出来的XV6代码 mkfs c L代表long 这创建了一个类型的文字long l也可以 但看起来像1 所
  • 连接表上的 where 子句

    对于下表 ROOM ID NAME 1 ROOM 1 2 ROOM 2 房间状态 ID ROOM ID OPEN DATE 1 1 1 2000 01 01 00 00 00 2 2 1 2000 01 01 00 00 00