如何通过LEFT OUTER JOIN获得正确的选择计数总数(*)?

时间:2012-05-10 17:38:49

标签: mysql

这是我没有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 个答案:

答案 0 :(得分:2)

使用:

count(distinct users.id)以获得正确的计数。

答案 1 :(得分:1)

此处,LEFT OUTER JOIN可能会产生更多计数,因为它还会计算users_iconicon_code表中的表行。如果users_iconicon_code中的相应行为空,则它也会计数。这是LEFT OUTER JOIN的行为。