un_*_*ard 7 mysql sql inner-join greatest-n-per-group
我有两个表:tableA (idA, titleA)和tableB (idB, idA, textB)有一个在它们之间一对多的关系.对于tableA中的每一行,我想检索tableB中对应的最后5行(由idB排序).
我试过了
SELECT * FROM tableA INNER JOIN tableB ON tableA.idA = tableB.idA LIMIT 5
Run Code Online (Sandbox Code Playgroud)
但它只是限制了INNER JOIN的全局结果,而我想限制每个不同tableA.id的结果
我怎样才能做到这一点 ?
谢谢
很多简化和纠正的卡洛斯解决方案(他的解决方案将返回前5行,而不是最后......):
SELECT tB1.idA, tB1.idB, tB1.textB
FROM tableB as tB1
JOIN tableB as tB2
ON tB1.idA = tB2.idA AND tB1.idB <= tB2.idB
GROUP BY tB1.idA, tB1.idB
HAVING COUNT(*) <= 5
Run Code Online (Sandbox Code Playgroud)
在MySQL中,您可以使用tB1.textB即使它是逐个查询,因为您在第一个表中按idB分组,因此tB1.textB每个组只有一个值...
我认为这就是你所需要的:
SELECT tableA.idA, tableA.titleA, temp.idB, temp.textB
FROM tableA
INNER JOIN
(
SELECT tB1.idB, tB2.idA,
(
SELECT textB
FROM tableB
WHERE tableB.idB = tB1.idB
) as textB
FROM tableB as tB1
JOIN tableB as tB2
ON tB1.idA = tB2.idA AND tB1.idB >= tB2.idB
GROUP BY tB1.idA, tB1.idB
HAVING COUNT(*) <= 5
ORDER BY idA, idB
) as temp
ON tableA.idA = temp.idA
Run Code Online (Sandbox Code Playgroud)
有关此方法的更多信息请参见此处:
http://www.sql-ex.ru/help/select16.php
| 归档时间: |
|
| 查看次数: |
5358 次 |
| 最近记录: |