我有一个(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
其中win
为1
或0
。
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
答案 0 :(得分:5)
几个方法将它们全部设置为0,然后将每个会话的最小值更新为1.
Update table set win = 0
update table set win = 1 where ID in (Select min(ID) from table group by session)
OR 一体化
Update table set win=0 where ID not in (Select MIN(ID) from table group by session)
答案 1 :(得分:0)
考虑到MySQL执行更新的可怕语法,我能想到的唯一方法就是:
update t set win = 0
where id not in (
select id from (
select min(id) id from t
group by session
) s
);
也可以加入而不是分组,但我认为在这种情况下,一个小组会更快。