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

如何让SQL查询无论是否匹配数据都始终返回至少1条记录

核心问题说明

你之前的UNION方案失效的核心原因:两个查询子句都从table_a取数,一旦table_a为空,两个子句都会返回空,UNION后自然还是空结果。


可行方案

方案1:UNION ALL + 存在性判断(兼容性最强、逻辑直观)

-- 原有业务查询逻辑
SELECT column_a,
       CASE WHEN column_a > 10 THEN 0 ELSE 1 END AS column_b
FROM   table_a
UNION ALL
-- 仅当table_a无数据时返回默认行
SELECT -1 AS column_a, -1 AS column_b
WHERE  NOT EXISTS (SELECT 1 FROM table_a);

该写法的效果:table_a有数据时会正常返回所有业务查询结果,无数据时会返回你预设的(-1,-1)默认行,完全符合需求。

方案2:右连接固定单行表(适合复杂默认值场景)

SELECT 
  COALESCE(t.column_a, d.default_a) AS column_a,
  COALESCE(t.column_b, d.default_b) AS column_b
FROM (
  -- 原有业务查询逻辑
  SELECT 
    column_a,
    CASE WHEN column_a > 10 THEN 0 ELSE 1 END AS column_b
  FROM table_a
) t
RIGHT JOIN (
  -- 自定义默认值,固定返回1行
  SELECT -1 AS default_a, -1 AS default_b
) d ON 1=1;

该写法的效果:右连接的右侧是固定1行的默认值表,不管左侧业务查询有没有结果,都会保留右侧的行,最终结果要么是业务查询的所有行,要么是1行默认值。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:06:04