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

如何让MySQL查询返回含无记录用户(score为N/A)的结果?

解决SQL查询包含不存在用户并显示默认值的问题

现有a_team表数据

namescore
tony23
john32
eddy25
mark21
nick26
alex27
nick23

原查询问题

原使用的查询语句:

SELECT name, name FROM a_team WHERE (name LIKE 'tony%' or name LIKE 'john%' or name LIKE 'eddy%' or name LIKE 'mike%' or name LIKE 'paul%')

仅能返回表中已存在的tony、john、eddy的记录,无法包含不存在的mike和paul。需要修改查询,让结果包含这两个用户,且他们的score字段显示为n/a,预期结果如下:

预期结果

namescore
tony23
john32
eddy25
miken/a
pauln/a

解决方案

可以通过UNION ALL将表中已存在的目标用户记录,与手动构造的不存在用户记录合并,具体SQL语句如下:

精确匹配版本

SELECT name, CAST(score AS CHAR) AS score
FROM a_team
WHERE name IN ('tony', 'john', 'eddy')
UNION ALL
SELECT 'mike' AS name, 'n/a' AS score
UNION ALL
SELECT 'paul' AS name, 'n/a' AS score
ORDER BY name;

前缀匹配版本(保留原LIKE逻辑)

SELECT name, CAST(score AS CHAR) AS score
FROM a_team
WHERE name LIKE 'tony%' OR name LIKE 'john%' OR name LIKE 'eddy%'
UNION ALL
SELECT 'mike' AS name, 'n/a' AS score
UNION ALL
SELECT 'paul' AS name, 'n/a' AS score
ORDER BY name;

说明

  • 第一部分查询表中符合条件的已存在用户,用CAST(score AS CHAR)将数值型的score转为字符类型,避免和n/a的字符串类型出现兼容问题(如果你的score字段本身就是字符类型,可以省略转换)。
  • 后面两个UNION ALL语句分别构造mike和paul的虚拟记录,直接指定score为n/a。
  • 最后用ORDER BY name可以让结果按名称排序,和预期结果结构一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:37:10