Това отговаря на първоначалния въпрос.
Не са ви необходими нито tags
нито users
таблица за вашата заявка, така че тя може да бъде много опростена.
DISTINCT
не е разрешено с JSON_AGG()
. Но можете да използвате подзаявка:
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;
Тук е db<>цигулка.