mysql:11627
From: 梅沢 功 <梅沢 功 <umezawa@xxxxxxxxxx>>
Date: Sat, 25 Jun 2005 4:48:56 +0900
Subject: [mysql 11627] Re: 3つのテーブルのjoin
梅沢です。 すみません。何か違っているような... と思いながら安易にリプライして しまいました。 > From: MAO <mao@xxxxxxxxxx> > Date: 2005/06/25 Sat AM 03:30:05 JST > > 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.gid > GROUP BY g.gid; > > でやってみたところ、 > > +-----+---------+----------------+-------------+ > | gid | gname | count( u.uid ) | sum(i.inum) | > +-----+---------+----------------+-------------+ > | 1 | チームA | 6 | 48 | > | 2 | チームB | 1 | 3 | > +-----+---------+----------------+-------------+ > > となってしまいました。 count( u.uid )の方は、gid=1 に対してユーザ2人×アイテム3レコードと いうことで 6 になってしまったのですね。 sum(i.inum)もユーザ2人×(アイテム3レコードの個数の総和)になって しまったということです。 自宅には MySQL が入ったマシンがないので、Access で試してみました。 以下のような SQL を書けば OK なようです。すみませんが、細部は変更して ください。MySQL では副問合せを [] で括って良かったかどうか覚えていま せん。 # MySQL はほとんど使ったことがないもので... SELECT g.gid, g.gname, count( u.uid ), item_count FROM (grp AS g LEFT JOIN usr AS u ON g.gid = u.gid) LEFT JOIN [select i.gid, sum(i.inum) as item_count from item i GROUP BY i.gid]. AS x ON g.gid = x.gid GROUP BY g.gid, g.gname, item_count;