MySQL左连接返回重复的结果
我正在运行一个查询,以查找已从我们的组织接收服务的用户,但我不希望他们的用户id重复。例如,我可能在系统中有5次用户id 1,但我只希望他们的id计数为1次。我的问题是:MySQL左连接返回重复的结果,mysql,sql,duplicates,left-join,duplicate-removal,Mysql,Sql,Duplicates,Left Join,Duplicate Removal,我正在运行一个查询,以查找已从我们的组织接收服务的用户,但我不希望他们的用户id重复。例如,我可能在系统中有5次用户id 1,但我只希望他们的id计数为1次。我的问题是: mysql_query("SELECT COUNT(*) AS 'total' FROM services LEFT JOIN users ON (services.USR_id = users.USR_id) LEFT JOIN service_type ON (services.SRV_type = service_typ
mysql_query("SELECT COUNT(*) AS 'total'
FROM services
LEFT JOIN users
ON (services.USR_id = users.USR_id)
LEFT JOIN service_type
ON (services.SRV_type = service_type.TYPE_id)
WHERE services.MGR_orgid = $mgrorgid GROUP BY services.USR_id");
删除
分组依据…
,并将计数(*)更改为计数(不同的usr\u id)
删除分组依据…
,并将计数(*)更改为计数(不同的usr\u id)
试试这个。我删除了包含service\u type
的部分,因为您在原始查询中对该表完全不做任何操作
试试这个。我删除了包含service\u type
的部分,因为您在原始查询中对该表完全不做任何操作。不要使用左连接。它将返回不接收服务的行,您将对它们进行计数。使用internaljoin
。计算用户id(如下Lajos所示)将解决这个问题。话虽如此,我还是不知道为什么查询中会有服务类型。谢谢Andrew。为了这个问题,我本可以删除它,但在我以后的代码中,它被用于一些结果中。我很感激您的输入。不要使用左连接
。它将返回不接收服务的行,您将对它们进行计数。使用internaljoin
。计算用户id(如下Lajos所示)将解决这个问题。话虽如此,我还是不知道为什么查询中会有服务类型。谢谢Andrew。为了这个问题,我本可以删除它,但在我以后的代码中,它被用于一些结果中。谢谢你的意见,谢谢你的回答,Lajos Veres。这种改变并没有完全奏效,我在过去尝试过它的几种变体,但我添加了COUNT(DISTINCT services.USR_id)并且奏效了!再次感谢,谢谢你的回答,Lajos Veres。这种改变并没有完全奏效,我在过去尝试过它的几种变体,但我添加了COUNT(DISTINCT services.USR_id)并且奏效了!再次感谢。感谢威廉·伦泽马的投入。感谢威廉·伦泽马的投入。
SELECT COUNT(*) AS total FROM users u
WHERE EXISTS (
SELECT * FROM services s
WHERE s.USR_id = u.USR_id
AND s.MGR_orgid = $mgrorgid
)