【问题标题】:LIMIT row with LEFT join使用 LEFT 连接限制行
【发布时间】:2017-07-31 12:17:30
【问题描述】:

我有“发布”和“评论”表。我要选择最后 3 个帖子所有 cmets 帖子。目前我使用 2 个单独的语句:

SELECT p.* FROM post p ORDER BY p.date DESC LIMIT 3; // called 1
SELECT c.* FROM comment c WHERE c.post_id = :id; // called 3x time for each post.

可以将这些查询合并为一个吗?

【问题讨论】:

    标签: mysql join limit


    【解决方案1】:

    您可以对帖子集使用子查询:

    SELECT p.*
    FROM (SELECT p.*
          FROM post p
          ORDER BY p.date DESC
          LIMIT 3
         ) p JOIN
         comment c
         ON c.post_id = p.id
    ORDER BY p.id, c.id;
    

    【讨论】:

    • 工作,没有任何问题。
    【解决方案2】:
    SELECT   POST .*, COMMENT.* 
    from POST INNER JOIN COMMENT ON POST.id = COMMENT.post_id
    where  POST.id = COMMENT.post_id ORDER BY POST.id  LIMIT 3
    

    【讨论】:

    • 这行不通。无论如何,我们总是只得到 3 条记录。
    【解决方案3】:

    你也可以试试这个

    SELECT p . * , c . * 
    FROM post p
    LEFT JOIN 
    COMMENT c ON c.post_id = p.id
    where p.id IN (SELECT id from post order by date desc limit 3) ORDER BY p.date
    

    【讨论】:

    • 有效。您的代码将我引向 SQL 错误 (1235):此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”。但很少搜索:stackoverflow.com/questions/17892762/…,问题就消失了。完美运行。
    猜你喜欢
    • 2016-09-26
    • 2013-06-15
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-09
    相关资源
    最近更新 更多