【问题标题】:MySQL LEFT JOIN Returns duplicate resultsMySQL LEFT JOIN 返回重复结果
【发布时间】:2013-11-28 01:55:18
【问题描述】:

我正在运行查询以查找已从我们组织获得服务的用户,但我不希望他们的用户 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_type.TYPE_id)
WHERE services.MGR_orgid = $mgrorgid GROUP BY services.USR_id");

【问题讨论】:

  • 不要使用LEFT JOIN。它将返回未接收服务的行,您将对其进行计数。使用INNER JOIN
  • 计算 user_id(如下 Lajos 所建议的)会解决这个问题。话虽如此,我不确定我是否明白为什么 service_type 在查询中。
  • 谢谢安德鲁。为了这个问题,我本可以删除它,但它在我以后的代码中的一些结果中使用。感谢您的意见。

标签: mysql sql duplicates left-join duplicate-removal


【解决方案1】:

删除group by ...,将count(*)改为count(distinct usr_id)

【讨论】:

  • 感谢您的回答,Lajos Veres。这种改变并不完全奏效,我过去尝试过它的几种变体,但我添加了 COUNT(DISTINCT services.USR_id) 并且它奏效了!再次感谢。
【解决方案2】:
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
)

试试这个。我删除了包含service_type 的部分,因为您在原始查询中对该表完全没有任何操作。

【讨论】:

  • 感谢 Willem Renzema 的投入。
猜你喜欢
  • 2012-03-27
  • 1970-01-01
  • 2013-11-01
  • 2019-03-25
  • 1970-01-01
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多