Как объединить разные таблицы с помощью сводной таблицы
У меня есть 4 стола вроде
users
id | name |
-------------
1 | abc |
2 | ccc |
user_profile
id | user_id | email |
-------------------------------
1 | 1 | [email protected]
2 | 2 | [email protected]
skills
id | skill_name |
--------------------------
1 | java |
2 | php |
user_skills
user_id | skill_id |
---------------------------
1 | 1 |
1 | 2 |
2 | 1 |
Результат должен быть
name | email | skills |
----------------------------------
abc |[email protected] | java, php |
ccc |[email protected] | 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
Может ли кто-нибудь помочь мне в этом, пожалуйста ?? Спасибо






Ваш запрос должен работать. Возможно, проблема в ссылке на programs, а не на skills:
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_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;
Обратите внимание, что я группирую как по идентификатору пользователя, так и по имени, потому что, возможно, у двух пользователей одно и то же имя. Перейдите по ссылке ниже, чтобы запустить SQLFiddle.
Сделайте свою группу concat на
skills.skill_name