Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL:Abfrage mit zwei vielen zu vielen Beziehungen und Duplikaten, mit vollständigen Daten aus Unterabfragen

Mit JOIN erhalten Sie die gewünschten Daten s in der Unterabfrage. Wenn Sie nur die Namen wollen, können Sie verwenden:

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;

Ich bin mir nicht sicher, welche Datenstruktur Sie sowohl mit den IDs als auch mit den Namen wünschen. Wenn Sie ein Array von JSON-Objekten mit zwei Feldern in jedem Objekt wünschen:

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;

hier ist eine db<>Geige für diese Version.