如何使用CASE更新MySQL中的条目以获得新值?

yi0zb3m4  于 2023-05-05  发布在  Mysql
关注(0)|答案(7)|浏览(155)

有谁能告诉我如何解决这个问题吗?

update ae44
set Price = Case
when ID = 'AT259793380' then '500'
when ID = 'AT271729590' then '600'
when ID = 'AT275981020' then '700'
end case

我只是想大规模更新上市价格的基础上,通过匹配的ID。

slmsl1lt

slmsl1lt1#

UPDATE  ae44
SET     price =
        CASE
        WHEN ID = 'AT259793380' THEN
                '500'
        WHEN ID = 'AT271729590' THEN
                '600'
        WHEN ID = 'AT275981020' THEN
                '700'
        END

请注意,此查询将使用其他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
3b6akqbq

3b6akqbq2#

UPDATE ae44 SET
    Price = CASE
    WHEN ID = 'AT259793380' THEN '500'
    WHEN ID = 'AT271729590' THEN '600'
    WHEN ID = 'AT275981020' THEN '700'
    ELSE Price END

或者你可以使用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')

设置限制也是一个好主意:

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
mccptt67

mccptt673#

删除第二个“case”,它将工作:

UPDATE ae44
SET Price = (CASE
WHEN ID = 'AT259793380' THEN '500'
WHEN ID = 'AT271729590' THEN '600'
WHEN ID = 'AT275981020' THEN '700'
END)
beq87vna

beq87vna4#

你可以尝试一个简单的查询,如:

UPDATE `table`
SET Price = ELT(field(ID,'AT259793380','AT271729590','AT275981020'), '500', '600', '700')
WHERE ID IN ('AT259793380','AT271729590','AT275981020')
qyzbxkaa

qyzbxkaa5#

我假设这是一个mysql查询。您可以使用Quassnoi发布的第一个查询,然后添加

WHEN ID THEN price

作为最后的“当”。这将防止您的所有价格字段被设置为空

UPDATE  ae44
    SET price =
    CASE
    WHEN ID = 'AT259793380' THEN '500'
    WHEN ID = 'AT271729590' THEN '600'
    WHEN ID = 'AT275981020' THEN '700'
    WHEN ID THEN price
    END
wlzqhblo

wlzqhblo6#

检查mysql错误会发现:
SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以了解在'= ' AT 275981020 ' then '700' end case'附近使用的正确语法
我不知道您是否认为可以将case作为别名,或者该别名可以用于什么。也许这只是您在SELECT查询中发现的另一个CASE块的错误copy-pasta。
最终,问题出在后面的case上。一旦删除了最后一个单词,查询就会执行,但还有更多的内容需要解释。
在我自己的项目中,我将使用CASE语法的更简洁的变体,其中ID只编写一次,而不是在每种情况下都编写大多数冗余的表达式。
我还建议使用小写的列名,这样SQL就更容易被人阅读。

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

添加WHERE原因后,只有3行将被列入白名单以供可能的修改-因此,ELSE可以安全地从CASE块中省略。

aelbi1ox

aelbi1ox7#

update ae44
set Price = 
Case ID
when 'AT259793380' then '500'
when 'AT271729590' then '600'
when 'AT275981020' then '700'
end case

相关问题