#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