Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:zapytanie z dwoma relacjami wiele do wielu i duplikatami, z pełnymi danymi z podzapytań

Możesz uzyskać żądane dane za pomocą JOIN s w podzapytaniu. Jeśli chcesz tylko nazwy, możesz użyć:

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;

Nie jestem pewien, jakiej struktury danych chcesz, zarówno z identyfikatorami, jak i nazwami. Jeśli potrzebujesz tablicy obiektów JSON z dwoma polami w każdym obiekcie:

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;

Tutaj to db<>skrzypce dla tej wersji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można połączyć się z żadnym z określonych hostów mysql. C# MySQL

  2. Codeigniter/PHP sprawdza, czy można połączyć się z bazą danych

  3. Używanie MySQLi do WSTAWIANIA danych do bazy danych

  4. wstaw do zaznaczenia w zduplikowanym zapytaniu mysql

  5. PRZEŁĄCZ z LIKE wewnątrz zapytania SELECT w MySQL