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

为列批量赋值时,如何更简洁编写SQL的CASE WHEN语句?

更简洁的方式填充fledgling列数据

我给数据表新增了名为fledgling的列,现在需要为该列填充数据。现有数据表结构及数据如下:

IDbirdnameheightwingspaneggsbroodsincubationfledglingnestbuilder
1Great Blue Heron52785128NULLB
2Mallard28310130NULLF
3Common Loon36542131NULLB
4Bald Eagle37842136NULLB
5Golden Eagle40903145NULLB
6Red Tailed Hawk25483135NULLB
7Osprey24724142NULLB

我当前编写的SQL代码类似以下形式(仅展示部分逻辑):

SET BIRDS.incubation = (case when bird_id = 1 then 60
                            when bird_id = 2 OR bird_id = 11 then 52
                            when bird_id = 3 OR bird_id = 5 OR bird_id = 15 then 80
                            when bird_id = 4 then 90
                            when bird_id = 6 then 46
                            when bird_id = 7 then 58
                            when bird_id = 8 OR bird_id = 10 then 24
                            when bird_id = 9 then 55
                            ...

请问有没有更简洁的方式来填充fledgling列数据?


可以采用UPDATE结合VALUES行构造器的写法,比嵌套CASE WHEN更直观,维护也更方便,尤其适合批量匹配ID和对应值的场景:

示例代码(MySQL环境):

UPDATE BIRDS b
JOIN (
    VALUES
        (1, 60),
        (2, 52),
        (3, 80),
        (4, 90),
        (5, 80),
        (6, 46),
        (7, 58),
        (8, 24),
        (9, 55),
        (10, 24),
        (11, 52),
        (15, 80)
) AS temp (bird_id, fledgling_val)
ON b.ID = temp.bird_id
SET b.fledgling = temp.fledgling_val;

不同数据库适配调整:

  • PostgreSQL:需将VALUES子句嵌套在SELECT中:
    UPDATE BIRDS b
    SET fledgling = temp.fledgling_val
    FROM (
        SELECT * FROM (VALUES
            (1, 60),
            (2, 52),
            ...
        ) AS temp(bird_id, fledgling_val)
    ) temp
    WHERE b.ID = temp.bird_id;
    
  • SQL Server:使用表值构造器关联更新:
    UPDATE b
    SET b.fledgling = temp.fledgling_val
    FROM BIRDS b
    INNER JOIN (
        VALUES
            (1, 60),
            (2, 52),
            ...
        ) AS temp(bird_id, fledgling_val)
    ON b.ID = temp.bird_id;
    

这种写法的优势:

  • 结构清晰,ID与对应值一一对应,新增或修改条目只需在VALUES中添加/调整行即可
  • 避免冗长的CASE WHEN嵌套,可读性和可维护性大幅提升
  • 执行效率与CASE WHEN相当,但逻辑更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:28:23