1

いくつかのフィールドを含む4つのテーブルがあります

1. user(id, name, email, password, .....)
2. policy1(id, userid, ....)
3. policy2(id, userid, ....)
4. policy3(id, userid, ....)

これで、ユーザーの主キー (id)が他の3つのテーブルの外部キーであることが明らかになりました。

そのテーブルにユーザーが含まれている各ユーザーに対して、テーブルの総数を取得したいと思いidます。

例えば:

user id 1 has entry in any two tables, 
user id 2 has entry in three tables, 
user id 3 has entry in any single table

結果は次のようになります

id    total
1     2
2     3
3     1

使ってみLeft Joinましたが、期待通りの結果が得られませんでした。

4

1 に答える 1

1

サブクエリを使用して各ユーザーのカウントを取得し、値を合計して最終結果を取得できます。他のテーブルに一致する値がない場合でも、LEFT JOINすべての行を返すためにを使用しています。user他のテーブルの値を持つユーザーのみが必要な場合は、INNER JOIN:を使用できます。

select u.id,
  Coalesce(CntP1, 0) + Coalesce(CntP2, 0) + Coalesce(CntP3, 0) TotalCount
from `user` u
left join
(
  select count(*) CntP1, userid
  from policy1
  group by userid
) p1
  on u.id = p1.userid
left join
(
  select count(*) CntP2, userid
  from policy2
  group by userid
) p2
  on u.id = p2.userid
left join
(
  select count(*) CntP3, userid
  from policy3
  group by userid
) p3
  on u.id = p3.userid
于 2013-01-18T11:03:47.623 に答える