mysql:11624
From: MAO <MAO <mao@xxxxxxxxxx>>
Date: Sat, 25 Jun 2005 01:22:35 +0900
Subject: [mysql 11624] 3つのテーブルのjoin
こんばんは、MAOです。 すみません。教えてください。 3つのテーブルをjoinして結果をだしたいと思っています。 環境は4.0.23a-standard です。 テーブル:grp +-----+---------+ | gid | gname | +-----+---------+ | 1 | チームA | | 2 | チームB | +-----+---------+ テーブル:usr +-----+-----+------------+ | uid | gid | uname | +-----+-----+------------+ | 1 | 1 | あいうえお | | 2 | 1 | かきくけこ | | 3 | 2 | さしすせそ | +-----+-----+------------+ テーブル:item +-----+-----+------+----------+ | iid | gid | inum | iname | +-----+-----+------+----------+ | 1 | 1 | 2 | エンピツ | | 2 | 1 | 10 | 消しゴム | | 3 | 2 | 3 | 定規 | | 4 | 1 | 12 | 定規 | +-----+-----+------+----------+ と、3つのテーブルがあります。 grpテーブルのチームAとチームBにそれぞれ何人いて、 いくつの数のアイテムをもっているかを計算したいと思っています。 まず、2つのテーブルをjoinしてみました。 mysql> SELECT g.gid, g.gname, count( u.uid ) -> FROM grp g -> LEFT join usr u ON g.gid = u.gid -> GROUP BY g.gid; +-----+---------+----------------+ | gid | gname | count( u.uid ) | +-----+---------+----------------+ | 1 | チームA | 2 | | 2 | チームB | 1 | +-----+---------+----------------+ これで、チームごとのユーザ数はでました。 今度は、さらにjoinをして、チームごとのアイテム数も 出したいと思い下記のようなSQL文をかきました。 mysql> SELECT g.gid, g.gname, count( u.uid ) ,sum(i.inum) -> FROM (grp g -> LEFT join usr u ON g.gid = u.gid) left join item i on g.gid = i.iid -> GROUP BY g.gid; +-----+---------+----------------+-------------+ | gid | gname | count( u.uid ) | sum(i.inum) | +-----+---------+----------------+-------------+ | 1 | チームA | 2 | 4 | | 2 | チームB | 1 | 10 | +-----+---------+----------------+-------------+ すると、人数はあっているものの、アイテムの合計が 異なった結果になってしまいます。 これを、 +-----+---------+----------------+-------------+ | gid | gname | count( u.uid ) | sum(i.inum) | +-----+---------+----------------+-------------+ | 1 | チームA | 2 | 24 | | 2 | チームB | 1 | 3 | +-----+---------+------------------------------+ と、正しくだすには、どうすればよいでしょうか? 以上、よろしくお願いします。
-> 11624 2005-06-25 01:22 [MAO <mao@xxxxxxxxxx>] 3つのテーブルのjoin 11630 2005-06-27 09:52 ┗["T.Sasaki" <papasan2]