MySQL更新案例帮助

23 mysql

任何人都可以告诉我如何解决这个问题吗?

update ae44
set Price = Case
when ID = 'AT259793380' then '500'
when ID = 'AT271729590' then '600'
when ID = 'AT275981020' then '700'
end case
Run Code Online (Sandbox Code Playgroud)

我只想通过匹配ID来基于ID批量更新上市价格.

Qua*_*noi 36

UPDATE  ae44
SET     price =
        CASE
        WHEN ID = 'AT259793380' THEN
                '500'
        WHEN ID = 'AT271729590' THEN
                '600'
        WHEN ID = 'AT275981020' THEN
                '700'
        END
Run Code Online (Sandbox Code Playgroud)

注意,此查询将更新具有其他ID的记录的价格NULL.

如果您只想更新列表中的ID,请使用以下命令:

UPDATE  ae44
JOIN    (
        SELECT  'AT259793380' AS oldval, '500' AS newval
        UNION ALL
        SELECT  'AT271729590' AS oldval, '600' AS newval
        UNION ALL
        SELECT  'AT275981020' AS oldval, '700' AS newval
        ) q
ON      ae44.id = q.oldval
SET     price = q.newval
Run Code Online (Sandbox Code Playgroud)

  • 可能希望为任何其他情况添加明确的"else". (2认同)

小智 26

UPDATE ae44 SET
    Price = CASE
    WHEN ID = 'AT259793380' THEN '500'
    WHEN ID = 'AT271729590' THEN '600'
    WHEN ID = 'AT275981020' THEN '700'
    ELSE Price END
Run Code Online (Sandbox Code Playgroud)

或者您可以使用WHERE:

UPDATE ae44 SET
    Price = CASE
    WHEN ID = 'AT259793380' THEN '500'
    WHEN ID = 'AT271729590' THEN '600'
    WHEN ID = 'AT275981020' THEN '700'
    END
WHERE 
    ID IN ('AT259793380', 'AT271729590', 'AT275981020')
Run Code Online (Sandbox Code Playgroud)

设置LIMIT也是个好主意:

UPDATE ae44 SET
    Price = CASE
    WHEN ID = 'AT259793380' THEN '500'
    WHEN ID = 'AT271729590' THEN '600'
    WHEN ID = 'AT275981020' THEN '700'
    END
WHERE 
    ID IN ('AT259793380', 'AT271729590', 'AT275981020')
LIMIT 3
Run Code Online (Sandbox Code Playgroud)