mysql子查询限制也限制父查询

标签 mysql

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 个线程。

非常感谢您的帮助,提前致谢。

最佳答案

  1. @AgRizzo commented above ,您可能需要对子查询进行分组。

  2. 此外,内部联接只会产生联接条件在两个表中都匹配的记录:也就是说,没有回复的帖子将被排除。 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/

相关文章:

php/mysql CI 每当我将数据插入子表时,它不会存储父表的 id

MySQL:如何从具有该值的重复条目的表中获取值?

mysql - 如何规范化具有逗号分隔值的列

php - 查找附近的地点(位置或地点)

mysql - 将电子邮件退订存储到数据库

mysql - 部署 mysql 数据库时出现问题(utf8mb4_unicode_520_ci -> utf8mb4_unicode_ci)

mysql - 选择按另一个属性分组的促销项目

mysql - 排序会减慢查询速度

mysql - 当表有数千万条记录时,使用 "mysql mydb < mydb.sql"重新创建 MySQL DB 非常慢。如何改进呢?

php - 根据 col2 相关值从 MySQL 选择其中 col1 是值的行以及 col1 不是值的另一行