Esto responde a la pregunta original.
No necesitas ni las tags
ni los users
tabla para su consulta, por lo que se puede simplificar mucho.
DISTINCT
no está permitido con JSON_AGG()
. Pero puedes usar una subconsulta:
SELECT b.user_id, JSON_ARRAYAGG( b.tag_id) AS tags
FROM (SELECT DISTINCT b.user_id, bt.tag_id
FROM bookmark_tag bt JOIN
bookmark b
ON b.id = bt.bookmark_id
) b
GROUP BY b.user_id;
Aquí es un db<>violín.