Giả sử report
tới users
là 1:1
thì bạn sẽ có thể giải quyết vấn đề của mình bằng cách tổng hợp nhận xét trong một bảng dẫn xuất và thay vào đó tham gia vào bảng đó:
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
Nếu một báo cáo có thể có nhiều người dùng, bạn sẽ cần tổng hợp thông tin người dùng trong một bảng dẫn xuất theo cách tương tự.