2013-07-13 83 views
0

在此先感謝您的幫助。來自同一個表的多個MySQL查詢

我有一張表標記屬性。在該表中是產品項目編號(插針)和屬性編號。針的每個屬性都在單獨的行中

Ex。

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

我試圖找到一個查詢,讓我說「選擇引腳,如果屬性= 4,屬性= 5」

的屬性是顏色,大小等。所以讓所有記錄是紅色(4)和大小小(5)。

在上面的例子中,它會回位銷111和112

邁克

+0

你仍然有這個查詢有問題嗎? –

回答

1

這應該你使用countdistinct的工作:

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

這將返回有任何引腳屬性4和5.

+0

謝謝!它完全按照我的意願工作。 – user2579643

+0

@ user2579643 - np,很高興我能幫上忙! – sgeddes

0

這是「set-set-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; 
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