mysql - 使用子选择查询两个数据库

标签 mysql sql

我有两个 mysql 数据库:db_system 和 db_events,以及 我需要为每个设备 (db_system) 获取最后一个事件 (db_events)

    SELECT * FROM db_events.events WHERE db_events.events.device_id IN (
            SELECT device_id 
            FROM db_system.devices 
            WHERE db_system.devices.vendor = 1)
    ORDER BY db_events.events.id DESC LIMIT 1

但是我无法获取它,我只有一条记录,我不知道如何获取它,请有人帮助我吗? 非常感谢。

最佳答案

这应该对每个 Device_ID 使用 MAX(Id):

SELECT e.* 
FROM db_events.events e 
   JOIN (
      SELECT Max(id) MaxId, device_id
      FROM db_events.events
      GROUP BY device_id ) e2 on e.Id = e2.MaxId AND e.device_id = e2.device_id
WHERE e.device_id IN (
            SELECT device_id 
            FROM db_system.devices 
            WHERE vendor = 1)
ORDER BY e.id DESC

您可能不再需要 ORDER BY —— 我只是把它留在那里,以防您想要这样的结果。

此外,这确实假设 Max(Id) 决定了每个设备的最新事件——我假设这是因为您是按上面的 id DESC 订购的。如果没有,您可以使用具有相同逻辑的 DateTime 列。

关于mysql - 使用子选择查询两个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945280/

相关文章:

MySQL:查询抛出列不存在错误

mysql - 如果某些条件为真,则求和

sql查询先获取置顶帖

python - SQLAlchemy:对结果进行操作

sql - 无损分解

java - jdbc 与 java、单例连接对象或 spring jdbc 连接的连接?

PHP 没有看到 mysql 扩展

php - 安装 aimeos 时出现数据库错误 (Laravel 5.3)

php - 如何避免用户提交的MySQL数据库存储重复内容

javascript - 使用 INSERT INTO 的 SQL 请求出错