My Sql Group Concat возвращает повторяющиеся строки
У меня есть проблема, похожая на получение данных из нескольких таблиц в одну строку при объединении некоторых значений, но я не в состоянии понять это, и я новичок в sql запросах. У меня есть несколько таблиц, и я должен присоединиться к ним и получить несколько сцепленных данных подряд. Описание следующим образом:
Таблица 1 - задачи (id,title,user_id) id title user_id tree_id -- ----- ------- ------ 1 тестовое задание 1 20 Таблица 2 - task_follower(id,user_id,task_id) id user_id task_id -- ------- ------ 1 1 1 Таблица 3 - account_user(идентификатор, имя, адрес электронной почты) идентификатор имя электронной почты - ---- ----- 1 rakesh kumar3180@gmail.com Таблица 2 - id категории (id,category) категории - ------- 1 Project1 Таблица 2 - идентификатор task_category(id,user_id,task_id) идентификатор task_id category_id -- ------- ----- 1 1 1
И запрос, который я запускаю:
ВЫБЕРИТЕ a.*, GROUP_CONCAT(b.name SEPARATOR ',') AS member_names, GROUP_CONCAT(b.email SEPARATOR ',') AS member_emails, GROUP_CONCAT(DISTINCT d.category) SEPARATOR ',') в качестве категорий от задач как ВНУТРЕННИХ ПРИСОЕДИНЯЙТЕСЬ к Task_followers КАК ВКЛЮЧЕНО a.id = c.task_id INNER ПОДКЛЮЧИТЕ account_user AS AS ВКЛ c.user_id = b.id INNER ПРИСОЕДИНЯЙТЕСЬ К ПРИЛОЖЕНИЮ Task_category КАК Я ВКЛ. id ГДЕ a.id = 1 И a.user_id = 1 И ГРУППА ПО a.id
В результате этого запроса я получаю:
id title user_id tree_id member_names member_emails --- ----- ------- ------- ------------- ------------- 1 тестовое задание 1 20 Ракеш, Ракеш kumar3180@gmail.com,kumar3180@gmail.com
Я не могу понять, почему имя и адрес электронной почты дублируются? Пожалуйста, помогите мне решить эту проблему, а также, если бы вы могли объяснить мне, где я ошибся концептуально?
Я заметил, что когда номер категории, связанной с задачей, больше одного, возникает эта проблема. Пожалуйста, посмотрите на http://sqlfiddle.com/. Я создал там пример, чтобы продемонстрировать мою проблему.
1 ответ
Ты можешь использовать DISTINCT
внутри GROUP_CONCAT
как это:
GROUP_CONCAT(DISTINCT b.email SEPARATOR ',') AS member_emails