【问题标题】:Use subquery in WHERE caluse in mysql在 mysql 的 WHERE 子句中使用子查询
【发布时间】: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


【解决方案1】:

试试这个:

SELECT t1.uname, GROUP_CONCAT(t.group_name) AS group_name 
FROM user t1
LEFT JOIN user_group t2 ON FIND_IN_SET(t2.id, t1.group_id)
GROUP BY t1.id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多