【发布时间】:2015-02-18 01:18:20
【问题描述】:
我有两个表作为用户和用户组相关,这样每个用户都可以分配到一个或多个用户组。当包含用户组 id 的逗号分隔值时,用户表包含一个作为 group_id 的外键。 我想在单个查询中获取用户详细信息和他相关的逗号分隔组名。有什么方法可以在 SQL 中实现吗? user表的字段有:(id, uname, group_id) userGroup: (id, group_name)
我想要的是在单个 SQL 查询中获得 uname、group_name、user.id、group.id。
我尝试了以下查询,但它给了我错误
SELECT t1.uname, group_concat(t.group_name) FROM user t1
LEFT JOIN user_group t2
ON t1.group_id = t2.id
WHERE t2.id IN t1.group_id
【问题讨论】:
-
继@user2864740 的评论之后,您需要规范化为三个表 - User(UserId, Name)、Group (GroupId, Name) 和 UserGroup(UserId, GroupId)。
-
规范化你的表格。使用逗号分隔的列表来存储外键会导致很多问题和查询效率低下。
标签: mysql sql select group-by group-concat