【问题标题】:MySQL select duplicatesMySQL选择重复项
【发布时间】:2014-10-30 17:25:25
【问题描述】:

我有一个包含 group_id、user_id 和 role_id 的表。

由于唯一键设置错误,有用户在一个组中两次,具有不同的角色。像这样:

group_id   |   user_id   |   role_id
    1      |      1      |      1
    1      |      1      |      2 
    2      |      1      |      1
    1      |      2      |      1
    2      |      2      |      3

在这种情况下,我如何找到用户的用户 ID?那么,在这个例子中,只有用户 id 1?

编辑:

因为@Manil Liyanage 和@TX Turner 的答案都没有给我正确的结果,也许我需要再解释一下;

用户可以位于多个组中,但他们不应多次位于某个组中。不幸的是,由于唯一键错误,一些用户现在不止一次在同一个组中,但只是具有另一个角色。如何找到多次加入群组的用户?

【问题讨论】:

  • 如果他们在同一组中有不同的角色,他们是否重复?

标签: mysql


【解决方案1】:

以下将显示每个组重复的用户 ID 以及计数。

SELECT user_id, group_id, COUNT(group_id) cnt
FROM tablename
GROUP BY user_id, group_id
HAVING COUNT(group_id) > 1

【讨论】:

  • 对不起,这并没有给我正确的结果。请查看我对问题的编辑。
  • 根据您的说明更新了查询。这将向您显示同一组中的用户不止一次,以及此类用户的数量。
  • 逻辑是正确的,但您不需要子查询来应用 where 子句,请改用 HAVING(请参阅我的建议编辑)
【解决方案2】:

以下内容应该适合您。它显示了重复记录的 ida

编辑:使用连接的有计数语句中的键。

SELECT concat(concat('Group is: ',group_id) ,
concat(' user id : ' , user_id)) Places
FROM table
HAVING count(concat(group_id,concat (':',user_id))) > 1

【讨论】:

  • 对不起,这并没有给我正确的结果。请查看我对问题的编辑。
  • @veelen 更改 have-count 语句中的键组合以指定重复键。让我知道我用手机写的结果。
  • 这样,我得到了和之前一样的结果;只有一个结果与不属于同一组的用户不止一次。
  • @veelen 对于您给出正确答案的数据集应该是用户 ID 1 对吗?连接期间可能会出现问题,其中键和值组合将类似于另一个。例如。 gid 12 和 uid 16 可以等于 gid 1 和 uid 216。请尝试编辑后的中间加冒号分隔符。
  • coorect ans 确实应该是 1。最后一个查询给我的结果和以前一样:“Group is: 9 user id : 2”。不幸的是,ID 为 2 的用户多次不在任何组中。第 9 组的用户数量很大,很难目视检查是否有重复的用户 ID。
猜你喜欢
  • 2011-03-30
  • 1970-01-01
  • 2012-03-08
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多