mysql - 从联接表中仅获取 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'
解决方案
您的子查询返回多条记录(实际上是 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'
推荐阅读
- python - 使用 USB 将两个 BBB 连接到一台 PC
- python - 使用部分列名的 Pandas 数据框查找
- reactjs - REACT CLIENT:如何获取用户输入的任意域的 IP 地址?
- node.js - 如何生成持续时间数组
- angular - Angular 6:由外部自定义元素创建元素时未构造元素选择器的指令
- ruby - Gem therubyracer 未安装在 alpine docker 容器中
- css - 在css中创建简单的slideDown和slideUp动画
- recaptcha - 谷歌recaptchas中的未知参数
- next.js - Framer-motion导入中断页面Next Js
- javascript - 如何在 Galen 框架中迭代 findChildren?