我有下表
id| name |price| groupid | category
---------------------------------------
1 | product1 | 14 | grp1 | apparel
2 | product1 | 16 | grp1 | apparel
3 | product1 | 36 | grp1 | apparel
4 | product2 | 97 | grp2 | apparel
5 | product2 | 87 | grp2 | apparel
6 | product2 | 77 | grp2 | apparel
7 | product3 | 3 | grp3 | apparel
8 | product3 | 2 | grp3 | apparel
9 | product3 | 5 | grp3 | apparel
我想按类别获取此表中的产品,并按应用层中的组ID进行分组。这是我正在使用的简单SELECT查询:
SELECT * FROM products
WHERE category = 'apparel'
LIMIT 0,5
现在的问题是查询截断了结果,并且没有返回grp2(id = 6)中的最后一项(正如人们所期望的那样)。
我希望查询检测到组中的一个项目未返回,同时获取该项目,然后截断结果的其余部分。基本上我想要返回组中的所有项目或者根本不返回组中的任何项目。
我怎么可能实现这个目标?
编辑:每个组可能有1到12个项目。它是可变的。
答案 0 :(得分:2)
这是实现目标的一种方式:
SELECT t1.*
FROM products AS t1
JOIN (
SELECT DISTINCT groupid
FROM (
SELECT groupid
FROM products
WHERE category = 'apparel'
LIMIT 0,5) AS t
) AS t2 ON t1.groupid = t2.groupid
该查询使用派生表,该表包含属于应用groupid
时返回的行的所有不同 LIMIT
值。