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にあります10。そしてsession、ユニークではありません。

session同じ、を持ち、1を除くすべてのwinフィールドが設定されている行のグループを更新したいと思います。0

ゴール:

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の代わりに参加することも可能ですが、この場合はgroupbyの方が速いと思います。

于 2012-04-15T18:03:56.340 に答える