Запрос, многие-ко-многим, mysql

осваиваю sql
Помогите дополнить мой или написать новый запрос
Вот примерная схемка введите сюда описание изображения

Например, нам надо получить id и name Задачи и имя Пользователя, у которого id=2 введите сюда описание изображения

На это у меня есть запрос

SELECT 
usertasks.id,
tasks.id,
tasks.name,
users.firstName
FROM tasks, usertasks, users
WHERE tasks.id=usertasks.taskId AND users.id=usertasks.userId AND users.id=2
GROUP BY usertasks.id

НО, результат надо дополнить также именами Пользователей Соучастников Задачи.
Например, Вася работает на Задачей 2. Мы находим эту задачу {id: 2, name: зд2, firstName: Вася}, но также нам надо захватить Имя соучастника задачи Олега и тд введите сюда описание изображения


Ответы (1 шт):

Автор решения: Danil Apsadikov

Лучше не использовать декартово произведения в запросах, а использовать JOIN.
Пример того, как это можно реализовать:

  1. Сначала сделаем подзапрос, в котором найдем задачи пользователя с id = 2
SELECT userTask.taskId
INNER JOIN userTask ON user.id = userTask.userId
WHERE user.id = 2
  1. Затем делаем запрос, в котором берем все задачи, в которых участвует пользователь с id = 2 и при этом достаем других пользователей сокомандников
SELECT user.id, user.name, task.id, task.name
FROM user
INNER JOIN userTask ON userTask.userId = user.id
INNER JOIN task ON userTask.taskId = task.id
WHERE userTask.taskId IN (
    SELECT userTask.taskId
    INNER JOIN userTask ON user.id = userTask.userId
    WHERE user.id = 2)

Как-то так, если что код не проверял. Возможно есть решение лучше.

→ Ссылка