sql >> Databasteknik >  >> RDS >> Mysql

Mysql Inner Gå med och Gruppera genom att upprepa rad

Förutsatt report till users är en 1:1 relation, då bör du kunna lösa ditt problem genom att göra kommentaraggregeringen i en härledd tabell och gå med i den istället:

SELECT report.text, 
       Json_arrayagg(Json_object('display_name', users.display_name, 'photo_url' 
                     , 
                     users.photo_url))                       AS USER,
       rc.COMMENTS
FROM   report 
INNER JOIN users ON users.id = report.user_id 
LEFT JOIN (
  SELECT report_id,
         Json_arrayagg(Json_object('text', report_comments.text, 'display_name', 
                                   report_comments.user_id)) AS COMMENTS
  FROM report_comments 
  GROUP BY report_id
) rc ON rc.report_id = report.id 
WHERE  report.user_id = :userId 
GROUP  BY report.id 

Om en rapport kan ha flera användare måste du aggregera användarinformationen i en härledd tabell på samma sätt.




  1. Ökad MySQL Query-prestanda - Math tung fråga

  2. Wampserver-ikonen blir inte helt grön, mysql-tjänster startar inte?

  3. Hur man identifierar MySQL-prestandaproblem med långsamma frågor

  4. Returnera primärnycklar från en länkad server i SQL Server (T-SQL-exempel)