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 
Другие вопросы по тегам