2013-11-14 8 views
6

残る一つに削除された行の値を追加します。私はこのテーブルから重複行(名前を従っ) を削除したいは重複行を削除し、同様に、私はテーブルを持っている

id  | name | profit | cost 
--------------------------------------- 
1  | aaa  | 4  | 2 
2  | aaa  | 4  | 3 
3  | aaa  | 4  | 2 
4  | bbb  | 4  | 1 

が、追加削除を行う前に、

id  | name | profit | cost 
--------------------------------------- 
1  | aaa  | 12  | 7 
4  | bbb  | 4  | 1 

がでそれを行うことが可能です:残っている行に削除された行の値

ので、この場合、私は次のように実行クエリの後にテーブルが見えることを望みますmysqlは、別のテーブルを作成せずにデータをコピーします。これは大きなテーブルです(1行は100万行ですが、毎日増加します)。

+0

ためmin(id)で行のみを除いて行を削除? 1つのトランザクションで発生する必要がありますか?それはライブシステムですか? – Vatev

+0

あなたは本当に同じID = 1を持っていますか? – valex

+0

テーブルにプライマリキーがありませんか? –

答えて

1

SQLFiddle demo

NAME

UPDATE T a JOIN 
(
    SELECT min(ID) as minID,name,SUM(profit) as SP,SUM(cost) as SC 
    FROM T GROUP BY name 
) b 
ON a.id = b.minID 
SET a.profit = b.sp,a.cost=b.sc; 

ためmin(id)

まず、更新行とし、 '非常に大きな' どのくらいある各NAME

DELETE T 
FROM T 
LEFT JOIN 
(
    SELECT min(ID) minid ,name FROM T GROUP BY name 
) b 
ON t.id = b.minid 
WHERE b.minid is NULL 
+0

これは別のテーブルを作成するのと同じです。唯一の違いは、それが目に見えない一時表になることです。あなたはそれを2回やっているのでゆっくりです。 – Vatev

関連する問題