sql >> Database teknologi >  >> RDS >> Mysql

MySQL:forespørgsel med to mange til mange relationer og dubletter, med fuld data fra underforespørgsler

Du kan få de data, du ønsker, ved at bruge JOIN s i underforespørgslen. Hvis du kun vil have navnene, kan du bruge:

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;

Jeg er ikke sikker på, hvilken datastruktur du vil have med både id'erne og navnene. Hvis du ønsker en matrix af JSON-objekter med to felter i hvert 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;

Her er en db<>violin for denne version.




  1. Skal jeg mysql_real_escape_string adgangskoden, der er indtastet i registreringsformularen?

  2. CakePHP Model Query Return Data Formatering

  3. Sådan automatiseres dataindsamling og ikke fryse på 10 %

  4. Forespørg på tværs af flere databaser på samme server