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

如何将SQL查询无结果时的空值替换为指定内容(如'-')

解决SQL无匹配时返回'-'的问题

你的原查询在test.UPGRADE中没有匹配KEYED_NAME LIKE '%abc%' AND STATE = 'Active'的记录时,子查询(Select test_support from test.UPGRADE ...)返回NULL,导致WHERE ID = NULL没有匹配的test.[USER]记录,最终结果集为空。你尝试的CASE语句只处理了LAST_NAME为空字符串的情况,但无法解决“无结果行”的问题。

方案1:用COALESCE包裹子查询(最简实现)

这种方式直接确保无论有没有匹配,都返回一行结果:

SELECT COALESCE(
    (SELECT LAST_NAME 
     FROM test.[USER]
     WHERE ID = (SELECT test_support 
                 FROM test.UPGRADE
                 WHERE KEYED_NAME LIKE '%abc%'
                   AND STATE = 'Active')),
    '-'
) AS LAST_NAME;
  • 内层的SELECT LAST_NAME ...在有匹配时返回对应姓氏,无匹配时返回NULL
  • COALESCE函数会返回第一个非NULL的值,因此当内层查询无结果时,自动返回'-'

方案2:LEFT JOIN结合COALESCE(适合扩展多字段场景)

如果后续需要查询更多用户字段,可使用左连接的方式:

SELECT COALESCE(u.LAST_NAME, '-') AS LAST_NAME
FROM (
    SELECT test_support 
    FROM test.UPGRADE
    WHERE KEYED_NAME LIKE '%abc%'
      AND STATE = 'Active'
) AS up
LEFT JOIN test.[USER] u ON u.ID = up.test_support
UNION ALL
SELECT '-'
WHERE NOT EXISTS (
    SELECT 1 
    FROM test.UPGRADE
    WHERE KEYED_NAME LIKE '%abc%'
      AND STATE = 'Active'
);
  • 先通过子查询获取test.UPGRADE的匹配记录,左连接test.[USER]后,无匹配用户时u.LAST_NAME为NULL,COALESCE将其转为'-'
  • 最后通过UNION ALL+NOT EXISTS的判断,确保test.UPGRADE完全无匹配时也能返回一行'-'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:55:34