如何在MariaDB中使用Union返回包含空行的多ID查询结果?
实现指定ID查询,不存在的返回空行的解决方案
你当前的UNION ALL写法只会返回数据库中存在的si_id数据,不存在的ID不会生成对应行。要实现每个指定ID都有结果行(不存在则返回空),可以通过构造目标ID数据集+左关联原表的方式实现,具体SQL如下:
SELECT e.* FROM ( -- 构造包含所有需要查询的si_id的虚拟表 SELECT '02.352' AS si_id UNION ALL SELECT '05.173' AS si_id UNION ALL SELECT '02.305' AS si_id ) AS target_ids LEFT JOIN estoques e ON target_ids.si_id = e.si_id ORDER BY -- 保证结果按指定的ID顺序排列 CASE target_ids.si_id WHEN '02.352' THEN 1 WHEN '05.173' THEN 2 WHEN '02.305' THEN 3 END, -- 对存在的行按validade升序排序 e.validade ASC;
逻辑说明:
- 构造目标ID数据集:通过子查询
target_ids生成包含所有要查询的si_id的临时表,确保每个ID都占据一行。 - 左关联原表:使用
LEFT JOIN关联estoques表,这样即使某个si_id在原表中不存在,target_ids中的该行仍会保留,原表的所有字段会返回NULL,也就是你需要的空行。 - 排序控制:
CASE语句用来固定结果的顺序和你指定的ID顺序一致,避免排序打乱位置;同时对存在的有效数据按validade升序排列。
内容的提问来源于stack exchange,提问作者marcelo.delta
相关产品推荐
相关产品推荐

