2

我有一个(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
4

2 回答 2

5

几种方法将它们全部设置为 0,然后将每个会话的最小值更新为 1。

Update table set win = 0
update table set win = 1 where ID in (Select min(ID) from table group by session)

或多合一

Update table set win=0 where ID not in (Select MIN(ID) from table group by session)
于 2012-04-15T17:54:32.147 回答
0

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

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

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

于 2012-04-15T18:03:56.340 回答