5

次のような MyTable という MySQL テーブルがあるとします。

+----+------+-------+
| Id | Type | Value |
+----+------+-------+
|  0 | A    |     1 |
|  0 | B    |     1 |
|  1 | A    |     2 |
|  1 | B    |     3 |
|  2 | A    |     5 |
|  2 | B    |     8 |
+----+------+-------+

そして、それぞれに対して、同じの行のタイプと値の合計であるタイプのId新しい行を挿入したいと思います。このテーブルの主キーはであるため、Id,Type ペアの重複は問題ありません。CValueABId(Id, Type)

このクエリで必要な行を作成できます。

SELECT MyTable_A.Id AS Id, 'C' AS Type, (A_Val + B_Val) AS Value FROM 
       (SELECT Id, Value AS A_Val FROM MyTable WHERE Type='A') AS MyTable_A
  JOIN (SELECT Id, Value AS B_Val FROM MyTable WHERE Type='B') AS MyTable_B
    ON MyTable_A.Id = MyTable_B.Id

与える:

+----+------+-------+
| Id | Type | Value |
+----+------+-------+
|  0 | C    |     2 |
|  1 | C    |     5 |
|  2 | C    |    13 |
+----+------+-------+

Cしかし問題は、この結果を使用して、生成された type- row をに挿入するにはどうすればよいかということMyTableです。

クエリでこれを行う比較的簡単な方法はありますか、それともストアド プロシージャを記述する必要がありますか? 後者の場合、私はあまり詳しくないので、ガイダンスが役に立ちます。

4

2 に答える 2

4

asその選択を挿入に追加するだけです(「句は必要ありません」のように少し変更されています)。例えば:

insert into MyTable (Id,Type,Value)
    select MyTable_A.Id, 'C', (A_Val + B_Val) from ...

あなたのクエリが実際に正しいと仮定すると-私はそれを評価しません:-)

さらなる例として、

insert into MyTable (Id,Type,Value)
    select Id+1000, 'C', Value from MyTable where Type = 'A'

次の行を追加します。

+------+------+-------+
| Id   | Type | Value |
+------+------+-------+
| 1000 | C    |     1 |
| 1001 | C    |     2 |
| 1002 | C    |     5 |
+------+------+-------+
于 2010-05-16T13:50:58.467 に答える
2

select ステートメントの前に次の行を追加するだけです。

INSERT MyTable (Id, Type, Value)
于 2010-05-16T13:50:44.307 に答える