需要帮助从三个MySQL表中检索数据

时间:2013-04-25 15:10:27

标签: mysql

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

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

及以下是 user_hobbies 表格,其中包含字段ID,user_id和hobby_id

╔════╦═════════╦══════════╗
║ 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   ║
╚════╩═══════════╝

。实际要求是我需要一个查询来检索name,age,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 ║
╚══════╩═════╩══════════╩═════════════════════════╝

1 个答案:

答案 0 :(得分: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 ║
╚══════╩═════╩══════════╩═════════════════════════╝