2017-01-01 20 views
0

私は私が必要とする行を選択し、このクエリのMySQL:基準に基づいて、テーブル内の更新列は

SELECT *, min(id) 
FROM mytable 
WHERE col2='specval' 
GROUP BY col3 

を持っています。

Iは、それぞれ、上記選択された行の

UPDATE mytable 
set col4 = col3+1000 

を設定したいです。

したがって、選択した行ごとにcol4 = col3 + 1000というように、その表のcol4をそれぞれ設定することで、その行を更新する方法はありますか?

ありがとうございます。

+2

最小IDを選択しますが、他の列はグループ内のランダム行から来ており、最小値を持つ同じ行ではありません。適切な行を取得する方法については、http://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column?rq=1を参照してください。 – Barmar

答えて

1

は、次のようなクエリを使用することができます。

UPDATE mytable 
set col4 = col3+1000 
WHERE id in (
    SELECT * FROM (
    SELECT min(id) 
    FROM mytable 
    WHERE col2='specval' 
    GROUP BY col3 
) as myids 
); 
+2

mysqlで動作しません – GurV

+1

@Gurwinder Singh - これはvi由来のテーブルを使用しています –

0

更新句にもWHEREを使用できます。だから、(私はあなたのSELECTから推測している)あなたに何を意味するか、「選択」に応じて、あなたはこのような何かを行う可能性があります:

UPDATE mytable 
SET col4 = col3+1000 
WHERE col2 = 'specval'; 
+0

まあ... 'specval'はこの場合の質問です...ダイナミックです... – Haradzieniec

+0

あなたはそこに欲しいものを差し込むことができます。 –

+0

@Haradzieniec 'SELECT'クエリと同じように動的に指定することができます。 – Barmar

1

ます'select *、min(id) `は各グループの最小IDを持つ行を選択しません:JOINでUPDATEを使用することができます:

UPDATE mytable t1 
     INNER JOIN 
    (SELECT 
     col3, MIN(id) id 
    FROM 
     mytable 
    GROUP BY col3) t2 ON t1.col3 = t2.col3 AND t1.id = t2.id 
SET 
    t1.col4 = t1.col3 + 1000; 
+0

私はこの解決法が好きです。間違いなくMySQLの精神に溢れています。 –

関連する問題