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

UNION仅返回第一个SELECT结果的问题排查

问题分析与解决方法

你的SQL语句只返回Temperaturetab的数据,核心问题出在UNION的使用逻辑上:

  1. UNION的列匹配规则:UNION要求两个查询的列数完全一致,且对应位置的列数据类型兼容,最终结果的列名由第一个查询的别名决定。你第二个查询的Timestamp会被映射到第一个查询的Time列,Humidity会被映射到Temp列——这完全不符合你的预期,甚至可能因数据类型不兼容导致第二部分数据被过滤。
  2. UNION的去重特性:默认的UNION会自动去重合并相同的行,如果两个表的时间戳和对应值恰好有重复,会导致Humiditytab的数据丢失,应该用UNION ALL保留所有原始行。

正确的SQL写法

要实现「分别获取温度和湿度数据,后续在PHP中处理」的需求,需要让两个查询返回相同的列结构,缺失的列用NULL填充:

SELECT
  Timestamp as 'Time',
  Temperature as 'Temp',
  NULL as 'Hum'
FROM Temperaturetab
WHERE Timestamp BETWEEN '[some timestamp]' AND '[some other timestamp]'
UNION ALL
SELECT
  Timestamp as 'Time',
  NULL as 'Temp',
  Humidity as 'Hum'
FROM Humiditytab
WHERE Timestamp BETWEEN '[some timestamp]' AND '[some other timestamp]'
ORDER BY Time; -- 可选,按时间戳排序,方便后续处理

这样查询结果会包含三列:

  • Time:所有来自两张表的时间戳
  • Temp:温度值(仅Temperaturetab的行有值,其余为NULL)
  • Hum:湿度值(仅Humiditytab的行有值,其余为NULL)

你在PHP中可以直接根据Temp和Hum是否为NULL来区分是温度数据还是湿度数据,无需额外处理时间戳。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:07:19