@tordroid

Как использовать оператор IN внутри SELECT на присоединенных колонках?

Привет, есть примерно такой запрос:
SELECT
	d.id,

	GROUP_CONCAT(watchers_to_groups.user_id) AS test_1,
	current_usr.user_id IN (18,104,1,15) AS test_2,
	current_usr.user_id IN (watchers_to_groups.user_id) AS test_3
FROM
	kpi AS d
LEFT JOIN users AS current_usr ON current_usr.user_id = 1

LEFT JOIN kpi_watchers_groups AS kpi_watchers_groups ON kpi_watchers_groups.kpi_id = d.id
LEFT JOIN users_to_groups AS watchers_to_groups ON watchers_to_groups.data_id = kpi_watchers_groups.group_id
GROUP BY
	d.id

На который я получаю следующий результат:
5c6a5bd671bc6959431229.png

Каждая запись может принадлежать к нескольким группам из таблицы kpi_watchers_groups
К каждой группе могут принадлежать несколько пользователей users_to_groups

Подскажите, сделать что бы колонка test_3 выбиралась правильно?
Мне нужно проверить принадлежит ли текущий пользователь(current_usr.user_id) к пользователям из групп записи.
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
По-моему приведенный запрос не будет работать, т.к. нет агрегатных функций возле группируемых параметров. Если не анализировать структуру БД и условия запроса, а только преобразовать его, то будет как-то так:
WITH check_user as (
	SELECT :user_id IN (18,104,1,15) check_id FROM dual
),
main_query as (
	SELECT
	  kpi.id,
	  GROUP_CONCAT(users_to_groups.user_id) AS test_1,
	  SUM(:user_id=users_to_groups.user_id) AS test_3
	FROM kpi
	LEFT JOIN kpi_watchers_groups ON kpi_watchers_groups.kpi_id = kpi.id
	LEFT JOIN users_to_groups ON users_to_groups.data_id = kpi_watchers_groups.group_id
	GROUP BY kpi.id
)
SELECT
	main_query.*,
	check_user.check_id test_2
FROM main_query
CROSS JOIN check_user
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы