0

我有两张桌子AB。我的查询是-

Select A.item, B.description, B.brand from A inner Join B on A.id=B.a_id where B.brand_id=1 limit 0,3
UNION
Select A.item, B.description, B.brand from A inner Join B on A.id=B.a_id where B.brand_id=2 limit 0,3
UNION
Select A.item, B.description, B.brand from A inner Join B on A.id=B.a_id where B.brand_id=3 limit 0,3

输出类似于-

item    description    brand
1001    item1          brand1
1002    item2          brand1
1003    item3          brand1
1004    item4          brand2
1005    item5          brand2
1006    item6          brand2
1007    item7          brand3
1008    item8          brand3
1009    item9          brand3

现在我的要求是获取记录为-

item    description    brand
1001    item1          brand1
1004    item4          brand2
1007    item7          brand3
1002    item2          brand1
1005    item5          brand2
1008    item8          brand3
1003    item3          brand1
1006    item6          brand2
1009    item9          brand3

任何建议:(

4

1 回答 1

3

如果您想要一个纯 SQL 答案,那么 Oracle 的RANK OVER PARTITION的以下 MySQL 解决方法加上内联视图和一些排序应该可以工作,无论您拥有多少品牌:

select item,description,brand
from
(select A.item, B.description, B.brand,
case B.brand
        when @curBrand 
        then @curRow := @curRow + 1 
        else @curRow := 1 and @curBrand := B.brand END
      as rank
from A inner join B on A.id=B.a_id
join (select @curRow := 0, @curBrand := '') r
) t
order by t.rank,t.brand;

享受!

于 2013-02-15T16:34:06.663 回答