[英]Get only 3 rows from joined table
我試圖從連接表中只獲取三行。 例如,我有一個類別表。 我想在不使用 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'
在 MySQL 8+ 中,您只需執行以下操作:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.