To odpowiada na pierwotne pytanie.
Nie potrzebujesz ani tags
ani users
tabeli dla zapytania, dzięki czemu można ją znacznie uprościć.
DISTINCT
nie jest dozwolone z JSON_AGG()
. Ale możesz użyć podzapytania:
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;
Tutaj to db<>skrzypce.