2012-05-10 2 views
0

ここにはJOINステートメントのない全ユーザーがいます。LEFT OUTER JOINを使用して、選択カウント(*)の正しい総数を取得するにはどうすればよいですか?

mysql> SELECT COUNT(*) AS total 
    -> FROM users; 
+--------+ 
| total | 
+--------+ 
| 608000 | 
+--------+ 
1 row in set (0.28 sec) 

そしてLEFT OUTER JOINここ

mysql> SELECT COUNT(*) AS total 
    -> FROM users 
    ->  LEFT OUTER JOIN users_icon 
    ->   ON users.uid = users_icon.iconuid 
    ->  LEFT OUTER JOIN icon_code 
    ->   ON users_icon.icondata = icon_code.iconid; 
+--------+ 
| total | 
+--------+ 
| 608084 | 
+--------+ 
1 row in set (3.78 sec) 

と私は別の合計数を持っています。 LEFT OUTER JOINの場合、総数はどのようにして608000になりますか?

+2

おそらくテーブルに複数の関連する行があるためですか? – eggyal

+0

これを試してみてください。SELECT COUNT(users.id)AS合計 – Bryan

+0

3つのテーブルの間に1対1の関係がないかぎり、それらをすべて一緒に結合するとさらに多くの行があるとは思わないでしょうか? –

答えて

2

用途:

count(distinct users.id)正しい数を取得します。

+0

何かを学んだことがうれしい! – Bryan

1

ここで、LEFT OUTER JOINは、テーブルの行数をusers_iconicon_codeとカウントするので、より多くのカウントを生成することがあります。 users_iconまたはicon_codeの対応する行がNULLの場合は、それもカウントされます。 LEFT OUTER JOINの動作です。

関連する問題