在此先感谢您的帮助。
我有一个标有属性的表。在该表中是产品项目编号(引脚)和属性编号。引脚的每个属性都位于单独的行中
前任。
pin attribute
111 4
111 5
111 10
112 4
112 5
...
我试图找到一个允许我说“如果属性 = 4 和属性 = 5,则选择 pin”的查询
属性将是颜色、大小等。所以获取所有红色 (4) 和小号 (5) 的记录。
在上面的示例中,它将返回引脚 111 和 112。
麦克风
这应该适用于您使用countwith distinct:
select pin
from attributes
where attribute in (4,5)
group by pin
having count(distinct attribute) = 2
这将返回同时具有属性 4 和 5 的任何引脚。
这是“set-within-sets”查询的一个示例。我提倡使用聚合和having子句来做到这一点。对于您的示例,这看起来像:
select pin
from attributes
group by pin
having sum(attribute = 4) > 0 and
sum(attribute = 5) > 0;
我喜欢这种方法的原因是它很灵活。如果您想要属性 4或5,查询将是:
having sum(attribute = 4) > 0 or
sum(attribute = 5) > 0;
如果你想要 4 和 5 而没有别的:
having sum(attribute = 4) > 0 and
sum(attribute = 5) > 0 and
sum(attribute not in (4, 5)) = 0;
select pin,
group_concat(distinct attribute order by attribute) as atts
from attributes
where attribute in (4,5)
group by pin
having (atts = '4,5');