小编典典

mysql在同一表的UPDATE中嵌套了SELECT

sql

本质上,我需要执行以下操作。…这只是一个示例…,但是第一个查询的语法在MySQL中不起作用

update people set prize = '' 
where prize = 'Gold' and class = (select class from people where id = person_id);
update people set prize = 'Gold' where id = <id>;

任何班级只有一个人可以获得金奖。我只知道获得金奖的人的person_id。

我想在第一个查询中排除与person_id相同类别的所有以前的金奖得主。然后在第二个中设置新的金牌得主。

我相信我需要使用某种类型的内部联接,但是对此我不是100%肯定。

如果我可以在一个查询中完成全部工作,那会更聪明!

谁能提供建议?

谢谢 :)


阅读 227

收藏
2021-05-16

共1个答案

小编典典

UPDATE people
SET    prize = CASE WHEN id = @lucky THEN 'Gold' ELSE 'Silver' END
WHERE  class = (
       SELECT  class
       FROM    people
       WHERE   id = @lucky
       )

这将为所有用户授予Silver奖品,但@lucky获得的人除外Gold

如果只需要更新@lucky和冠军,请发出以下命令:

UPDATE people
SET    prize = CASE WHEN id = @lucky THEN 'Gold' ELSE 'Silver' END
WHERE  id = @lucky
       OR (class, prize) =
       (
       SELECT  class, 'Gold'
       FROM    people
       WHERE   id = @lucky
       )
2021-05-16