У меня проблема, похожая на получение данных из нескольких таблиц в одну строку при объединении некоторых значений, но я не могу этого понять, и я новичок в sql-запросах. У меня несколько таблиц, и я должен присоединиться к ним и получить несколько объединенных данных в ряд. Описание выглядит следующим образом:
Table 1 - tasks(id,title,user_id) id title user_id tree_id -- ----- ------- ------- 1 test task 1 20 Table 2 - task_follower(id,user_id,task_id) id user_id task_id -- ------- ------- 1 1 1 Table 3 - account_user(id,name,email) id name email -- ---- ----- 1 rakesh [email protected] Table 2 - category(id,category) id category -- ------- 1 Project1 Table 2 - task_category(id,user_id,task_id) id task_id category_id -- ------- ------- 1 1 1
И запрос, который я выполняю:
SELECT a.*, GROUP_CONCAT(b.name SEPARATOR ',') AS member_names, GROUP_CONCAT(b.email SEPARATOR ',') AS member_emails, GROUP_CONCAT(DISTINCT d.category) SEPARATOR ',') AS categories FROM tasks AS a INNER JOIN task_followers AS c ON a.id = c.task_id INNER JOIN account_user AS b ON c.user_id = b.id INNER JOIN task_category AS i ON a.id = i.task_id INNER JOIN category AS d ON i.category_id = d.id WHERE a.id = 1 AND a.user_id = 1 AND GROUP BY a.id
В результате этого запроса я получаю:
id title user_id tree_id member_names member_emails --- ----- ------- ------- ------------- ------------- 1 test task 1 20 rakesh,rakesh [email protected],[email protected]
Я не могу понять, почему дублируются имя и адрес электронной почты? Пожалуйста, помогите мне решить эту проблему, а также не могли бы вы объяснить мне, в чем я ошибся концептуально?
Я заметил, что эта проблема возникает, когда количество категорий, связанных с задачей, больше единицы. Взгляните на http://sqlfiddle.com/#!2/b96eb/1 Я создал там пример, чтобы продемонстрировать мою проблему.