我有2个表,如类别,产品。我想在单个查询中从每个类别中获取2个产品。
类别表包含以下内容
intCatId varName
1 cat1
2 cat2
3 cat3
======================
产品表
intPId PName intCatId
1 pro1 1
2 pro2 1
3 pro3 1
4 pro4 3
5 pro6 3
6 pro7 2
我使用了以下查询
SELECT a.*, b.* FROM product a INNER JOIN category b ON a.intCatId=b.intCatId GROUP BY b.intCatId
How to apply limit here.
我需要输出
intCatId varName intPid PName
1 cat1 1 pro1
1 cat1 1 pro1
2 cat2 6 pro7
3 cat3 4 pro4
3 cat3 5 pro6
请帮帮我。感谢
答案 0 :(得分:2)
不幸的是,Mysql不像其他RDBMS那样支持此类查询的窗口函数,但您可以使用用户定义的变量来使用排名查询
select intCatId, varName,intPId, PName,rank
from (
select *, @r:= case when @g = intCatId
then @r + 1
else 1 end rank,
@g:= intCatId
from(
select c.intCatId,c.varName, p.intPId, p.PName
from category c
join product p on c.intCatId=p.intCatId
order by c.intCatId
) a cross join(select @g:=null,@r:=0) t
) t1
where rank <= 2