Мне нужно получить данные чатов для пользователя и к этим данными добавить колонку с именем другого пользователя этого чата.
У меня получился такой запрос. Он работает, но, меня смущает дубликаты запросов и его многоуровневость.
select c.*, name
from chats c
left join (
select concat(u.first_name, ' ', u.last_name) as name, cp.chat_id
from users u
left join chat_participants ip on u.id = ip.user_id
where ip.user_id != 1 and ip.chat_id in (
select cp.chat_id
from chat_participants cp
where cp.user_id = 1 and cp.is_deleted = false -- duplicate
)
) p on p.chat_id = c.id
where c.id in(
select cp.chat_id
from chat_participants cp
where cp.user_id = 1 and cp.is_deleted = false -- duplicate
);
Можно ли его оптимизировать? И как это сделать?
Таблицы
chats
chat_participants
users
Explain