sql >> Database >  >> RDS >> Mysql

MySQL:query met twee veel-naar-veel relaties en duplicaten, met volledige gegevens uit subquery's

U kunt de gewenste gegevens verkrijgen met JOIN s in de subquery. Als u alleen de namen wilt, kunt u het volgende gebruiken:

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;

Ik weet niet zeker welke gegevensstructuur je wilt met zowel de id's als de namen. Als u een array van JSON-objecten wilt met twee velden in elk object:

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 is een db<>viool voor deze versie.




  1. mysql-query:toon overzicht van alle gedane betalingen en totaal van facturen op datum

  2. Hoe een onopgelost extern symbool te repareren vanwege MySql Connector C++?

  3. 4 uitvoermodi in tabelvorm in SQLite

  4. Neo4j - Creëer een relatie met Cypher