首页 > 解决方案 > 从联接表中仅获取 3 行

问题描述

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

我试过这个但没有用。(如果我设置limit 1它有效。但不工作limit 3

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'

标签: mysqlsql

解决方案


您的子查询返回多条记录(实际上是 3 条),因此应将相等运算符替换为IN运算符。

考虑:

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'

推荐阅读