MySQLで子データのスコアを親ごとに足したものを違うテーブルに保存するクエリ。SELECTとUPDATEを同時に行う。
MySQLで子データのスコアを親ごとに足したものを違うテーブルに保存する方法です。
SELECTとUPDATEを同時に行います。
構造的には
UPDATE 保存先テーブル名 ( SELECT 親テーブル名, SUM(子テーブル名.score) amount FROM 子テーブル名 LEFT JOIN 親テーブル名 ON 子テーブル.親テーブルid = 親テーブル.id) PA SET 保存先テーブル名.score = PA.amount WHERE 保存先テーブル名.親テーブルid = PA.id
このような感じです。 二行目に出てくる amount というのは、SUM(足し算)した結果に「amount」という名前を付けるよ、という意味です。 3行目に出てくる PA というのは、 2行目から3行目にかけて ()でくくって定義したテーブルの名前を「PA」という名前にして表しますよ、という意味です。 名前は何でもいいです。PAの中にはamountが入っているので、PA.amount という表記で値が取得できるわけです。
実際のコード例です
UPDATE club_scores, (SELECT clubs.id, SUM(club_results.score) amount FROM club_results LEFT JOIN clubs ON club_results.club_id = clubs.id WHERE club_results.club_id = clubs.id GROUP BY clubs.id) EC SET club_scores.score = EC.amount WHERE club_scores.club_id = EC.id;
これで、SELECTとLEFT JOINを使って足し算をしたスコアを UPDATEを使って、違うテーブルに 保存(アップデート)することが出来ました。