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

Mysql Inner Join and Group Powtarzając wiersz

Zakładając report do users to 1:1 relacji, powinieneś być w stanie rozwiązać problem, wykonując agregację komentarzy w tabeli pochodnej i dołączając do niej:

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 

Jeśli raport może mieć wielu użytkowników, musisz w ten sam sposób zagregować informacje o użytkownikach w tabeli pochodnej.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błędne wyjście MySQL z klauzulą ​​IN i parametrem

  2. Jak utworzyć nowego użytkownika i przyznać uprawnienia w MySQL

  3. Dołącz do dwóch stołów w PHP

  4. Wycofanie MySQL w przypadku transakcji z utraconym/rozłączonym połączeniem

  5. Jak kosztowne są JOIN w SQL? I/lub jaki jest kompromis między wydajnością a normalizacją?