1

我有三个名为“users”、“user_hobbies”和“hobbies”的表。以下是带有值的示例表;
下面是用户fields id, name and age

╔════╦══════╦═════╗
║ ID ║ NAME ║ AGE ║
╠════╬══════╬═════╣
║  1 ║ abc  ║  23 ║
║  2 ║ xyz  ║  24 ║
║  3 ║ pqr  ║  21 ║
╚════╩══════╩═════╝

下面是带有字段 id、user_id 和 hobby_id的user_hobbies表

╔════╦═════════╦══════════╗
║ ID ║ USER_ID ║ HOBBY_ID ║
╠════╬═════════╬══════════╣
║  1 ║       1 ║        1 ║
║  2 ║       1 ║        2 ║
║  3 ║       1 ║        3 ║
║  4 ║       2 ║        4 ║
║  5 ║       2 ║        3 ║
║  6 ║       2 ║        5 ║
║  7 ║       3 ║        2 ║
║  8 ║       4 ║        6 ║
╚════╩═════════╩══════════╝

. 下面是带有字段 id 和 desc的爱好表

╔════╦═══════════╗
║ ID ║   DESC    ║
╠════╬═══════════╣
║  1 ║ music     ║
║  2 ║ chatting  ║
║  3 ║ cricket   ║
║  4 ║ badminton ║
║  5 ║ chess     ║
║  6 ║ cooking   ║
╚════╩═══════════╝

. 实际要求是我需要一个查询来检索姓名、年龄、hobby_id 和 desc(参见下面的示例)

╔══════╦═════╦══════════╦═════════════════════════╗
║ NAME ║ AGE ║ HOBBYID  ║        DESC             ║
╠══════╬═════╬══════════╬═════════════════════════╣
║ abc  ║  23 ║ 1,2,3    ║ music,chatting,cricket  ║
║ pqr  ║  21 ║ 2        ║ chatting                ║
║ xyz  ║  24 ║ 4,3,5    ║ badminton,cricket,chess ║
╚══════╩═════╩══════════╩═════════════════════════╝
4

1 回答 1

1

您需要先连接这些表并使用一个名为 的聚合函数GROUP_CONCAT()

SELECT  a.Name,
        a.Age,
        GROUP_CONCAT(c.ID) hobbyIDs,
        GROUP_CONCAT(c.desc) descList
FROM    users a
        INNER JOIN user_hobbies b
            ON a.ID = b.user_ID
        INNER JOIN hobbies c
            ON b.hobby_ID = c.ID
GROUP   BY a.Name, a.Age

要进一步了解有关联接的更多信息,请访问以下链接:

输出

╔══════╦═════╦══════════╦═════════════════════════╗
║ NAME ║ AGE ║ HOBBYIDS ║        DESCLIST         ║
╠══════╬═════╬══════════╬═════════════════════════╣
║ abc  ║  23 ║ 1,2,3    ║ music,chatting,cricket  ║
║ pqr  ║  21 ║ 2        ║ chatting                ║
║ xyz  ║  24 ║ 4,3,5    ║ badminton,cricket,chess ║
╚══════╩═════╩══════════╩═════════════════════════╝
于 2013-04-25T15:13:23.030 回答