我有一个表(700多行),格式如下:

id | session | win
------------------
 1     1122     1
 2     1122     1
 3     1122     1
 4     4559     1
 5     4559     1
 6     4559     1
 7     4559     1
 8     4559     1

其中win10
session不是唯一的。
我想更新具有相同session的行组,并将其所有win字段设置为0,但1除外。
目标:
id | session | win
------------------
 1     1122     1
 2     1122     0
 3     1122     0
 4     4559     1
 5     4559     0
 6     4559     0
 7     4559     0
 8     4559     0

最佳答案

考虑到MySQL执行更新的糟糕语法,我唯一能想到的方法是:

update t set win = 0
where id not in (
    select id from (
        select min(id) id from t
        group by session
    ) s
);

也可以加入而不是分组,但我认为在这种情况下分组会更快。

10-04 13:06