You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让SQL查询在内连接无结果时仍返回设备及空关联数据

解决方案:获取所有设备及其最新数据(含无数据设备)

原查询存在两个核心问题:

  • 使用INNER JOIN会自动过滤掉没有对应device_data记录的设备
  • 子查询取全局最大时间戳,只能拿到恰好匹配该时间的设备数据,无法保证每个设备都获取到自己的最新记录

以下是修正后的SQL语句,可满足需求:

SELECT 
    d.id,
    d.device_name,
    d.device_uid,
    d.device_type,
    d.account_id,
    dd.id_device,
    dd.timestamp,
    dd.value1,
    dd.value2,
    dd.value3
FROM devices AS d
LEFT JOIN (
    -- 筛选每个设备的最新数据行
    SELECT dd_inner.*
    FROM device_data AS dd_inner
    INNER JOIN (
        -- 先获取每个设备的最新时间戳
        SELECT id_device, MAX(timestamp) AS latest_timestamp
        FROM device_data
        GROUP BY id_device
    ) AS latest ON dd_inner.id_device = latest.id_device 
                AND dd_inner.timestamp = latest.latest_timestamp
) AS dd ON d.id = dd.id_device;

关键说明:

  1. LEFT JOIN替代INNER JOIN:确保devices表中所有设备都会被返回,没有对应device_data的设备,关联字段会自动填充为NULL
  2. 按设备分组取最新数据:内层子查询先按设备ID分组,获取每个设备的最新时间戳,再关联device_data拿到该时间点的完整数据,保证每个设备只返回自己的最新记录(如果存在)

示例输出:

iddevice_namedevice_uiddevice_typeaccount_idid_devicetimestampvalue1value2value3
1device1uid1type111some timesome valuesome valuesome value
2device2uid2type11NULLNULLNULLNULLNULL

内容的提问来源于stack exchange,提问作者sadrick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:31:14