SQL连接重复结果

时间:2011-07-22 09:16:12

标签: mysql sql join duplicates

SELECT `groups`.`name`, `groups`.`id`
FROM `groups`
JOIN `group_members`
    ON (`group_members`.`user_id` = `groups`.`user_id`)
WHERE `groups`.`user_id` = '33'
ORDER BY `groups`.`id`

我需要为他所在的每个小组获取小组的ID和小组名称。但结果不能重复!

我的查询返回了大量重复的条目。

groups中存储了所有存在的组(namedescription等)。在group_members中存储了属于某个群组成员的所有用户(user_idgroup_id等。)

如何修改此查询以获得不重复但正确的结果?谢谢你的建议!

修改

groups中没有user_id。该组的所有成员都存储在group_members表中。我需要获得用户所在的所有组(组的ID和名称)。

4 个答案:

答案 0 :(得分:5)

如果您想了解一个用户的所有群组,则必须加入group_members.group_id并修改WHERE条款。

SELECT `groups`.`name`, `groups`.`id`
FROM `groups`
JOIN `group_members`
    ON (`group_members`.`group_id` = `groups`.`id`)
WHERE `group_members`.`user_id` = '33'
ORDER BY `groups`.`id`

答案 1 :(得分:1)

首先,您的查询说明:

`groups`.`user_id` = '33'

这似乎不正确,因为为什么组表中会有用户?

关于这个问题。您可能正在获取重复项,因为用户可以存在于多个组中。因此,换句话说,如果您每个用户只需要一个组,那么它取决于您希望看到的组。它可能是最小的组ID,最大或几乎任何你想要的。

答案 2 :(得分:0)

我猜你已经混淆了一些字段,你走了:

SELECT `groups`.`name`, `groups`.`id` 
FROM `groups` 
JOIN `group_members`     
ON `group_members`.`group_id` = `groups`.`id` 
WHERE `groups_members`.`user_id` = '33' 
ORDER BY `groups`.`id

答案 3 :(得分:0)

SELECT g.name, g.id
FROM groups g
where EXISTS (
  select 'x'
  from group_members gm
  where g.id = gm.group_id
    and gm.user_id = '33'
)
ORDER BY g.id