Apache IoTDB中 ALL子查询的令人困惑的行为
我在Apache IoTDB 2.0.6的表模型中对查询使用ALL语法,但返回的结果与预期不一致。
最小可复现数据
CREATE TABLE main_data (
`time` TIMESTAMP `TIME`,
device_id STRING TAG,
value INT32 FIELD
);
CREATE TABLE detail_data (
device_id STRING TAG,
ref_value INT32 FIELD
);
INSERT INTO main_data VALUES
(2024-01-01T00:00:00, 'D1', 30),
(2024-01-01T01:00:00, 'D1', 40),
(2024-01-01T02:00:00, 'D1', 50);
INSERT INTO detail_data VALUES
(2024-01-01T00:00:00, 'D1', 30),
(2024-01-01T01:00:00, 'D1', 40),
(2024-01-02T00:00:00, 'D1', `NULL`);
查询语句
SELECT * FROM main_data
WHERE device_id = 'D1'
AND value > ALL (SELECT ref_value FROM detail_data WHERE device_id = 'D1');
返回结果
+----+---------+-----+
|`time`|device_id|value|
+----+---------+-----+
+----+---------+-----+
Empty set.
遇到的问题
在比较50 > ALL(30, 40, NULL) 时,没有返回任何结果。
我期望的行为是:忽略 NULL 的值,并返回如下结果:
+-----------------------------+----------+-------+
| `time`| device_id| value|
+-----------------------------+----------+-------+
|2024-01-01T02:00:00.000+08:00| D1| 50|
+-----------------------------+----------+-------+
问题
在进行比较时,应该如何调整SQL以忽略 NULL 的值?
解决方案
只不要与包含这些 NULL 值的行进行比较:
SELECT * FROM main_data
WHERE device_id = 'D1'
AND value > ALL (SELECT ref_value FROM detail_data WHERE device_id = 'D1' AND ref_value IS NOT NULL);
-- ^^^^^^^^^^^^^^^^^^^^^
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。