Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:truy vấn với hai quan hệ nhiều đến nhiều và các bản sao, với đầy đủ dữ liệu từ các truy vấn con

Bạn có thể lấy dữ liệu mình muốn bằng cách sử dụng JOIN s trong truy vấn con. Nếu bạn chỉ muốn có tên, bạn có thể sử dụng:

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;

Tôi không chắc bạn muốn cấu trúc dữ liệu nào với cả id và tên. Nếu bạn muốn một mảng các đối tượng JSON có hai trường trong mỗi đối tượng:

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;

Tại đây là một db <> fiddle cho phiên bản này.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CẬP NHẬT hoặc XÓA trước rồi CHÈN

  2. Làm thế nào để giám sát không gian MySQL?

  3. Cách tính toán sự khác biệt giữa hai ngày trong MySQL

  4. Kiểm tra xem dữ liệu tồn tại trong cơ sở dữ liệu

  5. Hợp nhất các điểm dài / vĩ độ trong một hộp giới hạn tùy thuộc vào bán kính trong MySQL