SELECT * FROM forum_posts AS post
INNER JOIN( SELECT parent AS rparent, author AS rauthor, MAX(created_at( AS rdate FROM forum_replies) AS reply
ON post.id = reply.rparent
我想从论坛检索所有记录,其中包含该主题的 1 个最新回复。 问题是该限制还会影响父查询,导致仅返回 1 个线程。
非常感谢您的帮助,提前致谢。
最佳答案
如@AgRizzo commented above ,您可能需要对子查询进行分组。
此外,内部联接只会产生联接条件在两个表中都匹配的记录:也就是说,没有回复的帖子将被排除。 p>
如果您希望保留一个表中的记录,即使连接条件不匹配,您也需要一个外部连接;在本例中,是左外部联接(以便来自联接左操作数的记录始终包含在结果集中)。
参见A Visual Explanation of SQL Joins了解更多信息。
因此:
SELECT * FROM forum_posts AS post LEFT JOIN (
SELECT parent AS rparent
, author AS rauthor
, MAX(created_at) AS rdate
FROM forum_replies
GROUP BY parent
) AS reply ON post.id = reply.rparent
或者,在连接之后执行分组:
SELECT post.*
, reply.parent AS rparent
, reply.author AS rauthor
, MAX(reply.created_at) AS rdate
FROM forum_posts AS post
LEFT JOIN forum_replies AS reply ON reply.parent = post.id
GROUP BY post.id
关于mysql子查询限制也限制父查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19345195/