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

SQL查询where子句in关键字含表不存在值时如何返回指定行?

需求说明

我有一张表,其中一列名为ID。我会在查询时传入一组值和ID列做匹配,希望如果该值在表中有对应记录,则返回匹配行;如果该值不存在于表中,也需要返回该值,其余列显示为空。

示例场景

现有一张包含ID和Animal两列的临时表#Temp1,共有8条记录。
原常用写法如下:

SELECT ID, Animal from #Temp1 where ID in (4,8,12)

该写法只会返回表中存在的ID=4、ID=8的两条记录,无法返回不存在的ID=12的行,不符合需求。

实现方案

不要用WHERE IN做过滤,改用左连接的方式实现:先把你要查询的所有ID构造为一个独立的结果集作为左表,再和原数据表做左连接,左表的所有ID都会保留,原表匹配不到的字段会自动返回空值。

通用写法(兼容所有关系型数据库)

SELECT v.id, t.Animal
FROM (
    SELECT 4 AS id UNION ALL
    SELECT 8 UNION ALL
    SELECT 12
) v
LEFT JOIN #Temp1 t ON v.id = t.ID

简化写法(适配MySQL 8.0+/PostgreSQL/SQL Server 2008+)

可以直接用VALUES构造ID列表,写法更简洁:

SELECT v.id, t.Animal
FROM (VALUES ROW(4), ROW(8), ROW(12)) v(id)
LEFT JOIN #Temp1 t ON v.id = t.ID

动态ID列表场景

如果ID是动态传入的逗号分隔字符串,可先拆分字符串为临时结果集再关联,以SQL Server为例:

SELECT v.value AS id, t.Animal
FROM STRING_SPLIT('4,8,12', ',') v
LEFT JOIN #Temp1 t ON CAST(v.value AS INT) = t.ID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 22:54:03