来自同一个表的多个MySQL查询

时间:2013-07-13 17:45:35

标签: mysql sql select

提前感谢您的帮助。

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

实施例。

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

我正在尝试查找一个允许我说“如果attribute = 4且属性= 5则选择引脚”的查询

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

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

麦克

3 个答案:

答案 0 :(得分:1)

使用countdistinct

,这对您有用
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');

fiddle