提前感谢您的帮助。
我有一个标有属性的表。在该表中是产品项目编号(引脚)和属性编号。引脚的每个属性都在一个单独的行中
实施例。
pin attribute
111 4
111 5
111 10
112 4
112 5
...
我正在尝试查找一个允许我说“如果attribute = 4且属性= 5则选择引脚”的查询
属性将是颜色,大小等。所以获取所有红色(4)和大小小(5)的记录。
在上面的示例中,它将返回引脚111和112。
麦克
答案 0 :(得分:1)
使用count
和distinct
:
select pin
from attributes
where attribute in (4,5)
group by pin
having count(distinct attribute) = 2
这将返回任何同时具有属性4和5的引脚。
答案 1 :(得分:0)
这是“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;
答案 2 :(得分: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');