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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:12:31