首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅从连接表中获取3行

问仅从连接表中获取3行
EN

Stack Overflow用户
提问于 2019-09-02 18:41:33
回答 2查看 112关注 0票数 2

我试图从连接表中只获取三行。例如,我有一个类别表。我想从这些类别中获得流行的类别和3篇文章,而不使用SQL inside循环。帖子总数应为12。

我试过了,但不起作用。(如果我设置了limit 1,它就能正常工作。但不能在limit 3上工作)

代码语言:javascript
复制
SELECT 
    categories.name AS cname,
    categories.url  AS curl,
    articles.name,
    articles.url,
    articles.image
FROM   
    categories
    JOIN articles ON articles.id = (
        SELECT p.id
        FROM articles AS p
        WHERE categories.id = p.category AND p.delete = '0'
        ORDER  BY p.id DESC
        LIMIT  3
    )
WHERE  
    categories.delete = '0'
    AND categories.popular = '1'
EN

回答 2

Stack Overflow用户

发布于 2019-09-02 18:45:28

您的子查询返回多条记录(实际上是3条),因此等式操作符应该替换为IN操作符。

考虑一下:

代码语言:javascript
复制
SELECT 
    categories.name AS cname,
    categories.url  AS curl,
    articles.name,
    articles.url,
    articles.image
FROM   
    categories
    JOIN articles ON articles.id IN (
        SELECT p.id
        FROM articles AS p
        WHERE categories.id = p.category AND p.delete = '0'
        ORDER  BY p.id DESC
        LIMIT  3
    )
WHERE  
    categories.delete = '0'
    AND categories.popular = '1'
票数 1
EN

Stack Overflow用户

发布于 2019-09-02 19:22:00

在MySQL 8+中,您只需执行以下操作:

代码语言:javascript
复制
SELECT c.name AS cname, c.url  AS curl,
       a.name, a.url, a.image
FROM categories c JOIN
     (SELECT a.*,
             ROW_NUMBER() OVER (PARTITION BY a.category ORDER BY a.id DESC) as seqnum
      FROM articles a
      WHERE a.delete = 0
     ) a
     ON a.category = c.id
WHERE a.seqnum <= 3 AND
      c.delete = 0 AND
      c.popular = 1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57755540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档