mysql中的连接透视表
如何使用数据透视表连接不同的表 我有四张像这样的桌子mysql中的连接透视表,mysql,sql,join,Mysql,Sql,Join,如何使用数据透视表连接不同的表 我有四张像这样的桌子 users id | name | ------------- 1 | abc | 2 | ccc | user_profile id | user_id | email | ------------------------------- 1 | 1 | abc@gmail.com 2 | 2 | ccc@gmail.com skills id |
users
id | name |
-------------
1 | abc |
2 | ccc |
user_profile
id | user_id | email |
-------------------------------
1 | 1 | abc@gmail.com
2 | 2 | ccc@gmail.com
skills
id | skill_name |
--------------------------
1 | java |
2 | php |
user_skills
user_id | skill_id |
---------------------------
1 | 1 |
1 | 2 |
2 | 1 |
结果应该是
name | email | skills |
----------------------------------
abc |abc@gmail.com | java, php |
ccc |ccc@gmail.com | java |
我可以连接多个表,但连接数据透视时遇到问题
我试过下面的问题
SELECT users.name,user_profiles.email, group_concat(programs.name)
from users
JOIN user_profiles on user_profiles.user_id = users.id
LEFT JOIN user_skills on user_skills.user_id = users.id
LEFT JOIN skills on user_skills.skill_id = skills.id
GROUP BY users.id
有人能帮我吗?谢谢你的查询应该可以。也许问题在于对
程序的引用,而不是技能的引用:
select u.name, up.email, group_concat(s.name)
from users u join
user_profiles up
on up.user_id = u.id left join
user_skills us
on us.user_id = u.id left join
skills s
on us.skill_id = s.id
group by u.name, up.email;
您需要GROUP\u CONCAT
生成CSV技能列表:
SELECT
u.name,
up.email,
GROUP_CONCAT(s.skill_name) AS skills
FROM users u
INNER JOIN user_profile up
ON u.id = up.user_id
LEFT JOIN user_skills us
ON u.id = us.user_id
INNER JOIN skills s
ON us.skill_id = s.id
GROUP BY
u.id, u.name, up.email;
请注意,我根据用户的id和名称进行分组,因为可能两个用户恰好具有相同的名称。按照下面的链接运行SQLFiddle。让您的团队专注于skills.skill\u name