JOIN
を使用して必要なデータを取得できます sサブクエリ内。名前だけが必要な場合は、次を使用できます:
SELECT a.id, a.title,
(SELECT JSON_ARRAYAGG(au.name)
FROM article_author aa JOIN
author au
ON au.id = aa.author_id
WHERE a.id = aa.article_id
) as authors,
(SELECT JSON_ARRAYAGG(t.tag)
FROM article_tag art JOIN
tag t
ON art.tag_id = t.id
WHERE a.id = art.article_id
) as tags
FROM article a;
IDと名前の両方でどのデータ構造が必要かわかりません。各オブジェクトに2つのフィールドを持つJSONオブジェクトの配列が必要な場合:
SELECT a.id, a.title,
(SELECT JSON_ARRAYAGG(JSON_OBJECT('name', au.name, 'id', au.id))
FROM article_author aa JOIN
author au
ON au.id = aa.author_id
WHERE a.id = aa.article_id
) as authors,
(SELECT JSON_ARRAYAGG(JSON_OBJECT('tag', t.tag, 'id', t.id))
FROM article_tag art JOIN
tag t
ON art.tag_id = t.id
WHERE a.id = art.article_id
) as tags
FROM article a;
ここ このバージョンのdb<>フィドルです。