お世話になっております。
以下のようなテーブルがあったとして、table1,table2の値を参照して加算し、master_tableの値を変更するようなSQLは一つの文で書く方法はありますでしょうか?
例えば、あるSQLを実行すると、master_tableのid1のscoreが500になるようなSQLです。
どなたかご教授ください。

master_table
id | score
1 | 0
2 | 0

table1
id | score
1 | 100
2 | 300

table2
id | score
1 | 400
2 | 100

このQ&Aに関連する最新のQ&A

A 回答 (3件)

横からですが、



>table3,table4などもっとテーブルがあった場合につなげて書くことが
>できるのでしょうか?

できます。

ただし、現在提示されているのは、無条件で全件をunionしているので、もし性能を重視するなら、unionで繋げるそれぞれのselect文で、id列に対する検索条件があった方がいいでしょう。

<update例1> unionを使う方法(ただし、MySQLの複数表の更新の構文使用)
update master_table as m,
(select x.id,sum(x.score) as sum_score
from
(select id,score from table1
union all
select id,score from table2) as x
group by x.id) as xx
set m.score=sum_score
where m.id=xx.id

<update例2> MySQLの複数表のupdate構文を使う方法
update master_table as m,table1 as t1,table2 as t2
set m.score=t1.score+t2.score
where m.id=t1.id and m.id=t2.id
    • good
    • 0
この回答へのお礼

どうもありがとうございます。

教えていただいた方法でうまくいきました!

また何かあればよろしくお願いします!!

お礼日時:2009/05/28 10:44

UPDATE文版



UPDATE MASTER_TABLE
SET MASTER_TABLE.SCORE
= ( SELECT S.SCORE
FROM
( SELECT R.ID,SUM(R.SCORE) AS SCORE
FROM
(SELECT TABLE1.ID,TABLE1.SCORE FROM TABLE1
UNION ALL
SELECT TABLE2.ID,TABLE2.SCORE FROM TABLE2 ) AS R
GROUP BY R.ID ) AS S
WHERE MASTER_TABLE.ID = S.ID )
WHERE EXISTS ( SELECT 1 FROM TABLE1 WHERE MASTER_TABLE.ID=TABLE1.ID )
OR EXISTS ( SELECT 1 FROM TABLE2 WHERE MASTER_TABLE.ID=TABLE2.ID )
    • good
    • 0
この回答へのお礼

UPDATE版のSQLどうもありがとうございます!
ところでこのUNION ALLですが、table3,table4などもっとテーブルがあった場合につなげて書くことができるのでしょうか?
例えば、
(SELECT TABLE1.ID,TABLE1.SCORE FROM TABLE1
UNION ALL
SELECT TABLE2.ID,TABLE2.SCORE FROM TABLE2
UNION ALL
SELECT TABLE3.ID,TABLE3.SCORE FROM TABLE3
UNION ALL
SELECT TABLE4.ID,TABLE4.SCORE FROM TABLE4) AS R
などというようにできるものなのでしょうか?

お礼日時:2009/05/27 11:49

たとえば・・・



REPLACE INTO master_table
SELECT id,SUM(score) FROM
(SELECT id,score FROM table1
UNION ALL SELECT id,score FROM table2 ) AS X
GROUP BY id
    • good
    • 0
この回答へのお礼

どうもありがとうございました!!
早速試してみます。

お礼日時:2009/05/27 11:13

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


人気Q&Aランキング

おすすめ情報