Спасибо! Думаю, мне стоит взглянуть на это после хорошего ночного сна. SQL я не использовал уже давно, так что, наверное, нужно пересмотреть ещё несколько примеров и документации. То, что ниже, точно не работает.
SELECT ub.id, ub.granted_at, g.name
from user_badges ub
INNER JOIN groups g
ON ub.id = g.id
WHERE g.name LIKE 'chapter_%'
OR g.name LIKE 'meta_chapter_%'
AND (:backfill OR ub.id IN (:user_ids))
Это вызывает ошибку, возможно, я передаю неверную информацию или неправильно указываю имя/колонку.
ERROR: column q.user_id does not exist
LINE 11: JOIN users u on u.id = q.user_id
Редактирование: а, да, user_id нужно брать откуда-то ещё, а не использовать id.
Итак, в итоге эти бейджи назначаются, если пользователь состоит в группе, название которой начинается с chapter_ или meta_chapter.
SELECT distinct on (gu.user_id)
gu.user_id, gu.updated_at as granted_at
FROM group_users gu
INNER JOIN groups g
ON gu.group_id = g.id
WHERE g.name LIKE 'chapter_%'
OR g.name LIKE 'meta_chapter_%'
AND (:backfill OR gu.id IN (:user_ids))
А этот запрос — для случаев, когда пользователь состоит в группе, название которой заканчивается на -team.
SELECT distinct on (gu.user_id)
gu.user_id, gu.updated_at as granted_at
FROM group_users gu
INNER JOIN groups g
ON gu.group_id = g.id
WHERE g.name LIKE '%-team'
AND (:backfill OR gu.id IN (:user_ids))