MySQLで3つ以上のテーブルをLEFT JOINで結合することに関しての質問です。
order item shipの3つのテーブルがあり、
itemの合計価格とshipの合計価格を求めるために以下のようなSQLを発行するとします。
SELECT SUM(item.price), SUM(ship.price) FROM ( order LEFT JOIN item ON order.id = item.orderid ) LEFT JOIN ship ON order.id = ship.orderid WHERE order.id = 1
このときにorder.id = 1に該当するitemとshipのレコードが複数あるときに、
それぞれのレコード数を掛け合わせた分の結果をSUMするため、
合計価格の計算がうまくできないかと思います。
1つのクエリでitemの合計価格とshipの合計価格を求めるにはどのようにしたらいいのでしょうか。
また3つ以上のテーブルをLEFT JOINするときに結合を囲むカッコのあるなしで結果に違いはありますか?
例
SELECT DISTINCT a.*
, (SELECT sum(b.price) FROM item b WHERE b.id = a.id) AS `数量`
, (SELECT sum(c.price) FROM ship c WHERE c.id = a.id) AS `価格`
FROM order a
WHERE a.id = 1
;
それぞれの合計だけ欲しい場合の例
SELECT a.id
, (SELECT sum(b.price) FROM item b WHERE b.id = a.id) AS `数量`
, (SELECT sum(c.price) FROM ship c WHERE c.id = a.id) AS `価格`
FROM (SELECT 1 AS id) a
;
括弧の有無についてですが、
今件の場合は先に記述したものから順に処理されますので括弧に意味は無いです