userテーブル
個人情報が保存されている。
no |
name |
1 |
AAAA |
2 |
BBB |
3 |
CC |
user_logテーブル
userテーブルの個人情報が変更される時、変更前の情報をバックアップとして保存していく。
no |
no__user |
name |
1 |
1 |
A |
2 |
2 |
B |
3 |
3 |
C |
4 |
1 |
AA |
5 |
2 |
BB |
6 |
1 |
AAA |
欲しい結果セット
userテーブルから全個人情報を引っ張ってくるついでにuser_logテーブルのレコード数も取得。
no |
log_total |
name |
1 |
3 |
AAAA |
2 |
2 |
BBB |
3 |
1 |
CC |
SELECT
COUNT(user.no = user_log.no__user) AS log_total,
user.no,
user.name
FROM user LEFT JOIN user_log ON user.no = user_log.no__user
GROUP BY user.no
改良版
SELECT
COUNT(user_log.no__user) AS log_total,
user.no,
user.name
FROM user LEFT JOIN user_log ON user.no = user_log.no__user
GROUP BY user.no
実行順序イメージ
※イメージなので見当はずれな可能性があります。
Bテーブル
id |
id__A |
1 |
1 |
2 |
1 |
3 |
2 |
4 |
2 |
5 |
2 |
LEFT JOINされ
A.id |
B.id |
COUNT結果 |
1 |
1 |
null |
1 |
2 |
null |
2 |
3 |
null |
2 |
4 |
null |
2 |
5 |
null |
3 |
null |
null |
COUNT結果が入り(B.id != null ? 1 : 0)
A.id |
B.id |
COUNT結果 |
1 |
1 |
1 |
1 |
2 |
1 |
2 |
3 |
1 |
2 |
4 |
1 |
2 |
5 |
1 |
3 |
null |
0 |
GROUP BYで纏める
A.id |
B.id |
COUNT結果 |
1 |
1 |
2 |
2 |
3 |
3 |
3 |
null |
0 |
参考
ttp://oshiete1.goo.ne.jp/qa5341627.html