MySql:如何从包含重复字段的行的表更新单行事件?

时间:2012-04-15 17:49:26

标签: mysql duplicates

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

其中win10session不是唯一的。

我想更新具有相同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

2 个答案:

答案 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
);

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