いちばん失敗した人決定戦

恐れ入ります。

Mysql をつかって、2つのテーブル(同一並びのカラム)の、各々のレコードを足したいのですが、
どのようにしたらよろしいでしょうか。

table1
------------
col1|col2|col3
20 |30 |40
40 |40 |50
10 |20 |20
------------

table2
------------
col1|col2|col3
10 |10 |20
20 |20 |20
10 |20 |20
------------

処理後

------------
col1|col2|col3
30 |40 |60
60 |60 |70
20 |40 |40
------------

のようにしたいです。よろしくお願いします。

A 回答 (2件)

データベースはExcelの表などと違って「二つの同じ形式の表の同じ位置にある値同士を足す」ようなことはできません。


ですから、table1の各レコードとtable2の各レコードを紐付けるための列が必要になります。
例えば以下のように「no」という列を追加します。

table1
--------------------
col1|col2|col3|no
20 |30 |40 | 1
40 |40 |50 | 2
10 |20 |20 | 3
--------------------

table2
--------------------
col1|col2|col3|no
10 |10 |20 | 1
20 |20 |20 | 2
10 |20 |20 | 3
--------------------

として

SELECT table1.col1 + table2.col1, table1.col2 + table2.col2, table1.col3 + table2.col3
FROM table1 INNER JOIN table2 ON table1.no = table2.no
ORDER BY table1.no;

とすれば一応は可能かと思いますが、これはtable1とtable2のレコード数が同じで、かつnoが必ず一対一で対応している場合でないと期待通りの結果を返してくれません。

実際には
・table1とtable2でレコード件数が違う
・noがtable1とtable2で一対一で対応していない
などの場合はさらに工夫が要りますが、どういう結果を返したいかによってやり方は変わってくるので、とりあえずはここまでで。
    • good
    • 0
この回答へのお礼

数字と綱目を揃えて、inner joinで計算されました。 ありがとうございます。

お礼日時:2013/02/22 17:10

結論からいえば、今のままではできません。



見た感じ1行目、2行目、3行目をそれぞれ足した結果を得たいように見えますが
SQLにおいてレコードの表示順は確実性がありません。
もしやるならそれぞれのレコードを確定するためのidを振り、
そのid同士をつかって連結するのが妥当です。
    • good
    • 0
この回答へのお礼

ありがとうございます。大変参考になりました。

お礼日時:2014/09/27 13:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!