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

如何使IN子句中未匹配的numit对应的id列返回NULL?

解决IN子句返回所有指定值(含无匹配项)的SQL写法

要实现你要的效果,核心思路是先构造包含所有目标numit的临时数据集,再和原表做左连接——这样就能保留所有你指定的numit值,没有对应id的自然就会显示NULL了。给你两种适配不同数据库的写法:

通用型写法(支持PostgreSQL、MySQL 8.0+、SQL Server等)

用VALUES子句快速生成临时数据集,再左连接原表:

SELECT t.numit, p.id
FROM (
    VALUES (40363), (40366), (40310), (40320), (40362), (40364), (40385), (40415)
) AS t(numit)
LEFT JOIN pecas p ON t.numit = p.numit
-- 如果你需要和期望结果的顺序完全一致,加上下面的ORDER BY
ORDER BY FIELD(t.numit, 40362, 40363, 40366, 40310, 40320, 40364, 40385, 40415);

兼容老版本MySQL的写法(无VALUES支持时)

用UNION ALL拼接出临时数据集:

SELECT t.numit, p.id
FROM (
    SELECT 40363 AS numit UNION ALL
    SELECT 40366 UNION ALL
    SELECT 40310 UNION ALL
    SELECT 40320 UNION ALL
    SELECT 40362 UNION ALL
    SELECT 40364 UNION ALL
    SELECT 40385 UNION ALL
    SELECT 40415
) AS t
LEFT JOIN pecas p ON t.numit = p.numit
-- 指定顺序的话同样用FIELD函数
ORDER BY FIELD(t.numit, 40362, 40363, 40366, 40310, 40320, 40364, 40385, 40415);

原理说明

左连接(LEFT JOIN)会完整保留左表(我们构造的临时表)的所有记录,右表(pecas)中没有匹配的行,对应的字段就会填充为NULL,完全符合你要的结果。如果不需要特定顺序,可以去掉ORDER BY子句。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:55:12