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

MySQL:如何让IN操作符中不存在的查询值在结果中显示为null

如何让未存在于表中的搜索值在查询结果中显示为NULL?

直接用WHERE name IN (...)只能返回表中已存在的记录,要把不在表中的搜索值也列出来并对应age为NULL,你需要先构造一个包含所有目标名称的临时数据集,再和原表做左连接(LEFT JOIN),具体方法如下:

方法1:用VALUES子句构造临时表(适用于MySQL 8.0+、PostgreSQL、SQL Server等)

这种写法更简洁,直接生成包含所有要查询名称的临时表:

SELECT t.name, p.age
FROM (
    VALUES ('john'), ('mike'), ('jane'), ('roger')
) AS t(name)
LEFT JOIN persons p ON t.name = p.name;

方法2:用UNION ALL构造临时表(兼容旧版MySQL等)

如果你的数据库版本不支持VALUES子句,可以用UNION ALL拼接多个SELECT来生成临时表:

SELECT t.name, p.age
FROM (
    SELECT 'john' AS name UNION ALL
    SELECT 'mike' UNION ALL
    SELECT 'jane' UNION ALL
    SELECT 'roger'
) AS t
LEFT JOIN persons p ON t.name = p.name;

结果说明

执行以上任意语句后,就能得到你想要的结果:

nameage
john20
mike25
jane31
rogernull

可选:固定结果顺序

如果需要严格按照你输入的名称顺序返回结果,可以给临时表加一个排序字段:

SELECT t.name, p.age
FROM (
    SELECT 'john' AS name, 1 AS sort UNION ALL
    SELECT 'mike', 2 UNION ALL
    SELECT 'jane', 3 UNION ALL
    SELECT 'roger', 4
) AS t
LEFT JOIN persons p ON t.name = p.name
ORDER BY t.sort;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 03:01:22