sql >> Databáze >  >> RDS >> Mysql

MySQL:dotaz se dvěma mnoho až mnoha vztahy a duplikáty, s úplnými daty z poddotazů

Požadovaná data můžete získat pomocí JOIN s v poddotazu. Pokud chcete pouze jména, můžete použít:

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;

Nejsem si jistý, jakou datovou strukturu chcete s ID i jmény. Pokud chcete pole objektů JSON se dvěma poli v každém objektu:

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;

Zde je db<>housle pro tuto verzi.




  1. Odstranit duplicitní řádky a nechat pouze nejstarší řádek?

  2. Export a import výpisu tabulky (.sql) pomocí pgAdmin

  3. Jak porozumět EXPLAIN ANALYZE

  4. Jak vypočítat časový rozdíl s plánem pracujícím se dvěma časovými razítky?