Mysql 如何使用左侧外部联接获得正确的选择计数(*)总数?

Mysql 如何使用左侧外部联接获得正确的选择计数(*)总数?,mysql,Mysql,这是我没有JOIN语句的总用户数 mysql> SELECT COUNT(*) AS total -> FROM users; +--------+ | total | +--------+ | 608000 | +--------+ 1 row in set (0.28 sec) 与左外连接 mysql> SELECT COUNT(*) AS total -> FROM users -> LEFT OUTER JOIN u

这是我没有JOIN语句的总用户数

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

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?

这里,
LEFT-OUTER-JOIN
可能会产生更多的计数,因为它还会对
用户图标
图标
表中的表行进行计数。如果
users\u icon
icon\u code
中的对应行为空,则该行也将计数。这是
左外部联接的行为

这里,
左外部联接
可能会产生更多的计数,因为它还将对
用户图标
图标
表中的表行进行计数。如果
users\u icon
icon\u code
中的对应行为空,则该行也将计数。这是左外联接的行为

使用:

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

使用:


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

可能是因为表中有多个相关行?尝试此操作,选择count(users.id)作为总计,除非所有三个表之间存在一对一关系,当您将所有行连接在一起时,您不希望有更多行吗?@BryanMoyles应该是
count(distinct id)
,您提到的计数将给出相同的结果number@rs.:完全正确。我误读了你的评论!抱歉。可能是因为这些表中有多个相关行?试试这个,选择COUNT(users.id)作为totals,除非这三个表之间有一对一的关系,否则当您将它们连接在一起时,您不希望有更多行吗?@BryanMoyles应该是
COUNT(distinct id)
,你提到的计数也会给出同样的结果number@rs.:完全正确。我误读了你的评论!道歉。