sql >> Databasteknik >  >> RDS >> Mysql

MySQL:fråga med två många till många relationer och dubbletter, med fullständiga data från underfrågor

Du kan få den data du vill använda med JOIN s i underfrågan. Om du bara vill ha namnen kan du använda:

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;

Jag är inte säker på vilken datastruktur du vill ha med både ID och namn. Om du vill ha en array av JSON-objekt med två fält i varje objekt:

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;

Här är en db<>fiol för denna version.




  1. Det går inte att ansluta till MySQL och utföra operationer i Play Framework 2.4

  2. Vad du ska kontrollera om MySQL I/O-användningen är hög

  3. Hur man ökar antalet förekomster av kolumnvärde i MySQL

  4. SQL Server Parallell Backup Restore -2