Сгруппируйте все строки с одинаковыми значениями, но объедините уникальные значения, отношение многих ко многим - PullRequest
0 голосов
/ 11 июля 2020

У меня есть эта таблица user:

id | name
1  ,  Mark

и таблица specialization

id | spec
1  ,  addictions
2  ,  psycho

и эта таблица, соединяющая пользователя и специализацию: user_specialization

user | specialization
1    ,        1
1    ,        2

Я хочу получить список всех пользователей и их специализаций Mark, specialization: addiction, psycho

Я также хочу получить тех пользователей, у которых нет специализации

У меня это SQL

SELECT name, spec 
FROM user 
LEFT JOIN user_specialization ON user.id = user_specialization.user 
LEFT JOIN specialization ON user.specialization.specialization = specialization.id

И это дает мне такой результат

name | spec
Mark , addictions
Mark , psycho

Мне нужно это:

name | spec
Mark | addictions, psycho

Как я могу этого добиться? Я предполагаю, что мне понадобится GROUP BY name, но я не знаю, как объединить эти spec строк.

1 Ответ

0 голосов
/ 11 июля 2020

Вы можете использовать group_concat следующим образом:

SELECT name, group_concat(spec)
FROM user 
LEFT JOIN user_specialization ON user.id = user_specialization.user 
LEFT JOIN specialization ON user.specialization.specialization = specialization.id
Group by name
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...