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

SQL Server查询无匹配记录时如何返回全为NULL的结果行

解决方案

场景1:需要保留原查询所有匹配行,仅无结果时补全NULL行

该方案为通用写法,适配绝大多数主流数据库(PostgreSQL、MySQL 8.0+、SQL Server、Oracle等):

WITH query_result AS (
    -- 这里替换为你原本的查询语句
    SELECT branch, acno, custno 
    FROM ac_master 
    WHERE branch = 9
)
SELECT * FROM query_result
UNION ALL
-- 无匹配结果时追加全NULL行
SELECT NULL AS branch, NULL AS acno, NULL AS custno
WHERE NOT EXISTS (SELECT 1 FROM query_result)

如果使用不支持CTE的旧版本数据库(如MySQL 5.x),可以用重复子查询的写法:

SELECT branch, acno, custno 
FROM ac_master 
WHERE branch = 9
UNION ALL
SELECT NULL, NULL, NULL
WHERE NOT EXISTS (
    SELECT 1 FROM ac_master WHERE branch = 9
)

注意事项

  • 两个SELECT查询返回的列数、列数据类型必须完全匹配,如遇到类型不兼容报错,可对NULL做显式类型转换,例如CAST(NULL AS UNSIGNED) AS branch
  • 原查询匹配到多少行就会返回多少行,仅当完全无匹配结果时才会追加1行全NULL记录

场景2:仅需要返回最多1行结果

如果你的查询逻辑本身只需要返回最多1行(比如branch=9对应的记录唯一),可以用更简单的聚合函数写法:

SELECT MAX(branch) AS branch, MAX(acno) AS acno, MAX(custno) AS custno
FROM ac_master
WHERE branch = 9

聚合查询在无匹配行时默认返回1行全NULL的结果,无需额外判断。缺点是如果原查询匹配到多行,只会返回1行聚合后的结果,无法保留所有匹配行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 20:15:01