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

如何编写SQL查询:ID不存在返回-1,存在返回0或更大值

实现指定ID不存在时返回-1的SQL查询

你原来的写法无法区分「ID不存在」和「ID存在但对应记录数为0」——因为不管ID是否存在,COUNT(*)都会返回0:当ID不存在时,WHERE条件匹配不到任何行,COUNT(*)自然为0,所以你的CASE语句永远只会返回COUNT(*)的值,不会触发ELSE分支。

下面提供两种可行的解决方案:

方法1:用EXISTS子查询判断ID是否存在

这种写法逻辑直观,先快速判断ID是否存在,再返回对应结果:

SELECT 
    CASE 
        WHEN EXISTS (SELECT 1 FROM mytable WHERE id = inputId) 
        THEN (SELECT COUNT(*) FROM mytable WHERE id = inputId)
        ELSE -1 
    END AS record_count;
  • 逻辑说明:EXISTS(SELECT 1 FROM mytable WHERE id = inputId)会高效判断表中是否存在该ID的行(找到匹配行就停止,无需遍历全部);若存在则统计该ID对应的记录数,不存在则直接返回-1。

方法2:用LEFT JOIN避免重复查询(更高效)

如果不想执行两次表查询,可以通过虚拟表左连接的方式,一次扫描完成判断和统计:

SELECT 
    CASE 
        WHEN MAX(m.id) IS NOT NULL THEN COUNT(m.id)
        ELSE -1
    END AS record_count
FROM (SELECT inputId AS target_id) AS t
LEFT JOIN mytable m ON m.id = t.target_id;
  • 逻辑说明:先创建包含目标ID的虚拟表t,再与原表左连接。若原表存在该ID,MAX(m.id)会返回非空值,此时COUNT(m.id)统计该ID对应的记录数;若原表不存在该ID,MAX(m.id)为NULL,直接返回-1。

如果你的原查询有额外过滤条件,只需将条件添加到COUNT子查询或JOIN的ON条件中即可。

内容的提问来源于stack exchange,提问作者דודו שטראוס

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:25:01