Możesz to zrobić za pomocą agregatów i/lub podzapytań. Coś takiego:
select title, content, json_agg(comments.author, comments.message) as comments
from articles
join comments on articles.article_id = comments.article_id
group by article_id;
Jeśli potrzebujesz tego zagregowanego w jeden ciąg/json/coś - po prostu zapakuj go w inne zapytanie zagregowane w ten sposób:
select json_agg(sub)
from (
select title, content, json_agg(comments.author, comments.message) as comments
from articles
join comments on articles.article_id = comments.article_id
group by article_id) sub;
To jest zapytanie Postgresa. Nie miej doświadczenia z MySQL.