0

在此先感谢您的帮助。

我有一个标有属性的表。在该表中是产品项目编号(引脚)和属性编号。引脚的每个属性都位于单独的行中

前任。

pin   attribute
111     4
111     5
111     10
112     4
112     5
...

我试图找到一个允许我说“如果属性 = 4 和属性 = 5,则选择 pin”的查询

属性将是颜色、大小等。所以获取所有红色 (4) 和小号 (5) 的记录。

在上面的示例中,它将返回引脚 111 和 112。

麦克风

4

3 回答 3

1

这应该适用于您使用countwith distinct

select pin 
from attributes
where attribute in (4,5)
group by pin
having count(distinct attribute) = 2

这将返回同时具有属性 4 和 5 的任何引脚。

于 2013-07-13T17:50:18.440 回答
0

这是“set-within-sets”查询的一个示例。我提倡使用聚合和having子句来做到这一点。对于您的示例,这看起来像:

select pin
from attributes
group by pin
having sum(attribute = 4) > 0 and
       sum(attribute = 5) > 0;

我喜欢这种方法的原因是它很灵活。如果您想要属性 45,查询将是:

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;
于 2013-07-13T18:21:26.480 回答
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');

小提琴

于 2013-07-13T18:49:25.157 回答