本质上,我需要执行以下操作。…这只是一个示例…,但是第一个查询的语法在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%肯定。
如果我可以在一个查询中完成全部工作,那会更聪明!
谁能提供建议?
谢谢 :)
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。
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 )