MYSQL内部连接返回重复结果(已使用DISTINCT)

时间:2018-02-22 15:52:11

标签: mysql left-join inner-join distinct

我有以下查询:

SELECT DISTINCT * FROM group_members
INNER JOIN groups ON groups.group_id = group_members.group_id
WHERE group_members.user_id = *1* OR groups.created_by = *1*

然而,当它执行时,我得到以下结果:

Test - user 1
Test - user 2

但我想要

Test - user 1, user 2

我似乎无法理解如何修改我的查询来生成它。有人会有想法吗?

本质上,我试图查询用户创建或属于的所有组

群组架构:

  • group_id(主键)
  • 组名
  • GROUP_DESCRIPTION
  • CREATED_BY
  • group_creation_date

Group_Members Schema

  • member_id(主键)
  • group_id(外键)
  • user_id(外键 - 用户表)
  • DATE_ADDED

1 个答案:

答案 0 :(得分:0)

这些行是截然不同的 - 所以DISTINCT正在做它的工作;它确保没有重复的行 - 这意味着如果您选择多个列,则确保没有重复的组合。它并不能确保紧跟其后的字段没有重复值,因为我认为您正在期待。

我想您可能希望将GROUP BY与GROUP_CONCAT一起使用?

https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

我不清楚你要选择哪些字段 - 但是类似于:

尝试:

SELECT *, GROUP_CONCAT(user_id)
FROM FROM group_members
INNER JOIN groups ON groups.group_id = group_members.group_id
WHERE group_members.user_id = *1* OR groups.created_by = *1* 
GROUP BY group_id
相关问题