【问题标题】:Mysql LEFT JOIN: Limit parent tableMysql LEFT JOIN:限制父表
【发布时间】:2013-02-20 22:43:09
【问题描述】:

我正在尝试从 DB 中获取结果,但将结果限制在右侧

SELECT posts.text, comments.text 
FROM posts 
LEFT JOIN comments ON comments.postid= post.id 
Limit 0,5 

如果有 5 个 cmets,上面将返回第一个帖子的 5 cmets。但是我想返回所有 cmets,但在 5 个帖子后停止查询。我该怎么办?


抱歉,我的问题一开始有点不清楚,因为我写错了 LEFT JOIN..

这是我的问题的解决方案:

SELECT posts.text, comments.text 
FROM ( SELECT * FROM posts Limit 0,5 ) 
LEFT JOIN comments ON comments.postid= post.id 

另一个问题。我只将posts.text 指定为选择列,但现在所有列都会返回为“*”包含在子查询中吗?

【问题讨论】:

  • 我很困惑。帖子只能有一条评论,还是应该是post.id=comment.postId
  • 对不起,你是对的,我已经修改了

标签: php mysql sql join


【解决方案1】:

如果这是您想要的,请使用子查询仅获取 5 个父项。

SELECT  p.text PostText,
        c.text CommentText
FROM
        (
            SELECT  id, text
            FROM    posts
            LIMIT   5
        ) p
        LEFT JOIN comments c
            ON c.postId  = p.id;

【讨论】:

  • 根据我的经验,MySQL 中的子查询可能比预期的要慢得多
  • @cja 总是有例外。但是如果不使用子查询,你怎么能解决这个问题呢?
  • @cja 不是关联子查询,所以只执行一次。性能应该没问题,虽然我怀疑这个问题对实际的表关系有点困惑。
  • 如果您有ORDER BY,这将不起作用。它只会在子查询的结果中排序。如果您想按最新的 cmets 订购。
猜你喜欢
  • 2013-04-07
  • 2016-12-16
  • 2013-04-19
  • 2011-12-08
  • 1970-01-01
  • 2018-07-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
相关资源
最近更新 更多