首页 > 解决方案 > 如何使用 MySql 从相关表中获取用户的详细信息?

问题描述

我有 3 个如下所示的表:

用户

id | name | password 
------------------------
2  | John | ******
3  | Ben  | ******
4  | Dan  | ******

用户爱好

id | user_id | hobbie_id
-------------------------
 1 |   2    | 1
 2 |   2    | 3
 3 |   3    | 1
 4 |   4    | 2

爱好

id | HobbieName
------------------------
 1 | Surfing
 2 | Walking
 3 | Soccer

我想找到用户的相关爱好,所以结果将如下所示:

username | HobbieName | hobbie_id
------------------------
   John  | Surfing    |    1
   Ben   | Surfing    |    1

如您所见 - 用户 John 和 Ben 有相同的爱好 - “冲浪”,因此结果将仅显示他们。

这是我到目前为止所做的 -

SELECT users.name, hobbies.hobbie_name,  COUNT(user_hobbies.hobby_id)   FROM 
user_hobbies 
INNER JOIN users on user_hobbies.user_id = users.id
INNER JOIN hobbies ON hobbies.id = user_hobbies.hobby_id
GROUP BY user_hobbies.hobby_id

结果:

name | hobbie_name | count
---------------------------
 dan |  Surfing    |  2

如您所见-我得到了每个爱好的计数-而不是与用户和爱好一起排

标签: mysqlsql

解决方案


要仅获取具有多个用户的爱好,请加入一个计算每个爱好的用户数的子查询。

SELECT users.name, hobbies.hobbie_name, user_hobbies.hobby_id
FROM user_hobbies 
INNER JOIN users on user_hobbies.user_id = users.id
INNER JOIN hobbies ON hobbies.id = user_hobbies.hobby_id
INNER JOIN (
    SELECT hobby_id
    FROM user_hobbies
    GROUP BY hobby_id
    HAVING COUNT(*) > 1
) AS multiple ON multiple.hobby_id = user_hobbies.hobby_id

推荐阅读