在连接的派生表查询中使用LIMIT

时间:2012-04-04 21:51:38

标签: mysql sql

我正在使用派生表(最新版本的MySQL)从其他表中获取计数和数据,直到我的主结果集。 LEFT OUTER JOIN中的一个小查询导致我出现问题。我正在尝试使用LIMIT 1条件获取此博客成员发布的最新评论的日期。下面的整个查询会获取会员的帐户详细信息和活动/登录统计信息。

SELECT mem.member_id, mem.screen_name, mem.firstname, mem.lastname,
mem.email, mem.add1, mem.add2, mem.town, mem.county,
mem.post_code, mem.country_code, mem.country_name, mem.joined, mem.member_status,
IFNULL(rep.rep,0) as reputation,
IFNULL(com.cnt,0) as comments,
com1.lcomm as last_comment
FROM members AS mem
LEFT OUTER JOIN (
    SELECT member_id, SUM(awarded_what) as rep
    FROM members_reputation
    GROUP BY member_id) rep
    ON mem.member_id = rep.member_id
LEFT OUTER JOIN (
    SELECT member_id, COUNT(comment_id) as cnt
    FROM blog_comments
    GROUP BY member_id) com
    ON mem.member_id = com.member_id
LEFT OUTER JOIN (
    SELECT member_id, posted as lcomm
    FROM blog_comments
    ORDER BY posted DESC LIMIT 1) com1   **** problem with LIMIT
    ON mem.member_id = com1.member_id

// more left outer join sub queries to other tables

WHERE mem.member_id = 1
GROUP BY mem.member_id

我将查询标记为问题,问题出在哪里。如果我使用ORDER BY posted DESC LIMIT 1,即使此成员有4条评论,它有时也不会返回last_comment日期,但有时会返回 - 不确定模式。如果我删除LIMIT 1它工作正常,但我担心它会返回所有评论日期,而不仅仅是最新日期,这会导致我在DB增长时出现问题。

这里发生了什么?为什么LIMIT 1有时不会返回last_comment日期?我的查询是否在没有LIMIT条件的情况下返回所有评论日期?解释/建议会非常棒。

1 个答案:

答案 0 :(得分:4)

这是你的问题

LEFT OUTER JOIN (
    SELECT member_id, posted as lcomm
    FROM blog_comments
    ORDER BY posted DESC LIMIT 1) com1   **** problem with LIMIT
    ON mem.member_id = com1.member_id

在你的另一个左连接节中,你正在做一个小组... 但是在上面的问题中,你依靠join子句将你的set限制为member_id,但是你已经订购并受到限制......

这意味着有时(一)结果与您的连接条件不匹配,导致空lcomm

你需要像这样的where子句

LEFT OUTER JOIN (
    SELECT member_id, posted as lcomm
    FROM blog_comments
        WHERE member_id = X
    ORDER BY posted DESC LIMIT 1) com1
    ON mem.member_id = com1.member_id