0

みなさん、こんにちは。

値がグループに分割されたテーブルがあり、各グループの行のみを変更したいとします。いくつかの例を見てみましょう。これが開始状況です。

ID   |   CODE   |  DEFAULT   
-----+----------+-----------
1    |   1234   |     0
2    |   1234   |     0
3    |   1234   |     0
4    |   5678   |     0
5    |   5678   |     0
6    |   7777   |     0
7    |   8888   |     0
8    |   8888   |     0
9    |   8888   |     0

を更新したいのですがDEFAULT、それぞれに1回だけですCODE

ID   |   CODE   |  DEFAULT   
-----+----------+-----------
1    |   1234   |     0
2    |   1234   |     1
3    |   1234   |     0
4    |   5678   |     1
5    |   5678   |     0
6    |   7777   |     1
7    |   8888   |     0
8    |   8888   |     0
9    |   8888   |     1

どちらを更新するかは重要ではありません。それぞれに1つだけ必要ですCODE

実際、私はその時だけ考えることができSELECT DISTINCT、ループを使ってSELECT ... LIMIT 1、結果があればそれを取りますUPDATEが、それは本当に汚い解決策です...単一(またはカップル)のクエリで実行できると確信しています..。。

何か案は?

4

1 に答える 1

1

コードごとに 1 つの行を返すサブクエリでUPDATEステートメントを使用できます。JOIN

update yourtable t1
inner join
(
  select min(id) minId
  from yourtable
  group by code
) t2
  on t1.id = t2.minid
set t1.`default` = 1

デモで SQL Fiddle を参照してください

于 2013-02-28T12:00:48.897 に答える