Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL:kueri dengan dua relasi dan duplikat banyak ke banyak, dengan data lengkap dari subkueri

Anda bisa mendapatkan data yang Anda inginkan menggunakan JOIN s di subquery. Jika Anda hanya ingin nama, Anda dapat menggunakan:

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;

Saya tidak yakin struktur data apa yang Anda inginkan dengan id dan namanya. Jika Anda menginginkan larik objek JSON dengan dua bidang di setiap objek:

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;

Di sini adalah db<>biola untuk versi ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sequelize Many to Many Query Issue

  2. Mengoptimalkan MySQL untuk ALTER TABLE dari InnoDB

  3. mysql order by Rand() masalah kinerja dan solusi

  4. Kolom tidak dikenal di 'daftar bidang' ketika placeholder pernyataan yang disiapkan ada di subquery

  5. Bagaimana cara mendapatkan perbedaan antara baris berurutan di MySQL?