带JOIN的每组N组

时间:2012-05-22 21:24:43

标签: mysql sql greatest-n-per-group

我正在尝试将逻辑复制为show here。但是,当有连接时,我没有运气。以下是我的查询的最小化版本:

SELECT resources.title, catRel.catRef
FROM resources 
LEFT JOIN placesRel ON placesRel.refId = resId 
LEFT JOIN catRel ON refId = resId
WHERE ...

简而言之,我得到一个包含类别ID的列表,我想将结果限制为只有一个类别的 n 结果,例如,每个只显示两个结果catRef:

title             catRef
Swizz Gubbinz     1
Runcible Spoons   1
Peter Pan DVD     2
Button Moon       2
Monkey Alan       3
Bilge Pump        3

2 个答案:

答案 0 :(得分:2)

如何在联接中使用子查询。我不确定哪个表refID和resID属于.....但

SELECT resources.title, catRel.catRef
FROM resources 
LEFT JOIN placesRel ON placesRel.refId = resId 
LEFT JOIN catRel as cr1 ON cr1.catRel.primaryKey in (select cr2.primaryKey from catRel as cr2 where cr2.refID = resId Limit 0,2)
WHERE ...

答案 1 :(得分:0)

由于缺少MySQL的窗口函数,答案并非无足轻重。 这是一个通过利用MySQL的GROUP_CONCAT选择每组前N个记录的技巧: MySQL: Selecting Top N Records Per Group

作为聚合函数,可以操纵GROUP_CONCAT以按所需顺序提供串联字符串。使用文本操作,解析字符串。 (可选)将值转换为适当的类型。