如何编写UPDATE语句重置从未获胜角色的等级数据?
修正后的UPDATE语句
原SQL的逻辑存在错误:它仅判断当前行的The_team_has_won不等于1,这会把每个角色的未获胜行都更新,但我们要的是从未有过任何获胜记录的角色——也就是该角色的所有记录里,完全没有The_team_has_won=1的情况。
下面是两种靠谱的修正写法:
写法一:用NOT IN筛选无获胜记录的角色ID
UPDATE Table1 SET lvl = 0 WHERE person_code NOT IN ( SELECT DISTINCT person_code FROM Table1 WHERE The_team_has_won = 1 );
写法二:用NOT EXISTS判断角色无获胜记录
UPDATE Table1 t1 SET lvl = 0 WHERE NOT EXISTS ( SELECT 1 FROM Table1 t2 WHERE t2.person_code = t1.person_code AND t2.The_team_has_won = 1 );
补充说明
- 两种写法都能精准定位从没赢过的角色,只更新他们的
lvl为0,不会改动角色A(person_code=3,有获胜记录)的数据。 - 第二种写法在数据存在NULL值时更稳妥,因为
NOT IN遇到NULL会出现不符合预期的结果。
内容的提问来源于stack exchange,提问作者Gtd
相关产品推荐
相关产品推荐

