Запрос с GROUP_CONCAT не работает

#mysql #sql #aggregate-functions #group-concat

#mysql #sql #агрегатные функции #group-concat

Вопрос:

У меня есть 3 таблицы со следующей структурой:

 **users**
id 
first_name
last_name


**specialties**
specialty_id
specialty_name


**user_specialties**
user_id
specialty_id
 

Вот некоторые примеры данных:

 **users**
1  Bill  Smith
2  Tom   Jones
3  Jill  Hayes


**specialties**
1  word
2  web
3  database

**user_specialties**
1  1
2  1
2  3
3  2
3  3
 

Мне нужно запросить данные, чтобы специализации были объединены в одну строку, как показано ниже

 **Desired Result**
Bill  Smith  word
Tom   Jones  word,database
Jill  Hayes  web,database
 

Я использую следующий запрос

 SELECT
users.first_name,
users.last_name,
GROUP_CONCAT(specialties.specialtyname)
FROM
users 
LEFT JOIN user_specialties ON user_specialties.user_id = users.userid
RIGHT JOIN specialties ON user_specialties.specialty_id = specialties.specialty_id
 

Он не работает…

Ответ №1:

Вам не хватает GROUP BY предложения. Скорее всего, так и должно быть GROUP BY users.id , и он будет идти ПОСЛЕ строк СОЕДИНЕНИЯ.

Ответ №2:

Я только что протестировал этот запрос

 SELECT first_name,last_name,group_concat(specialty_name) 
FROM user_specialties map 
INNER JOIN specialties skill on user.id = map.user_id 
INNER JOIN users user ON skill.specialty_id = map.specialty_id 
GROUP BY user.id
 

Приветствия! 🙂

Комментарии:

1. 1 для рабочего примера, но -1 для синтаксиса соединения, отличного от ANSI. Итак, 0 🙂

2. @Dan выберите first_name, last_name,group_concat(specialty_name) из user_specialties map Навык внутреннего объединения специальностей на user.id = map.user_id ВНУТРЕННЯЯ РЕГИСТРАЦИЯ пользователей пользователь ПО навыку.specialty_id = map.specialty_id группа по user.id