Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql中的连接透视表_Mysql_Sql_Join - Fatal编程技术网

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