在此先感謝您的幫助。來自同一個表的多個MySQL查詢
我有一張表標記屬性。在該表中是產品項目編號(插針)和屬性編號。針的每個屬性都在單獨的行中
Ex。
pin attribute
111 4
111 5
111 10
112 4
112 5
...
我試圖找到一個查詢,讓我說「選擇引腳,如果屬性= 4,屬性= 5」
的屬性是顏色,大小等。所以讓所有記錄是紅色(4)和大小小(5)。
在上面的例子中,它會回位銷111和112
邁克
在此先感謝您的幫助。來自同一個表的多個MySQL查詢
我有一張表標記屬性。在該表中是產品項目編號(插針)和屬性編號。針的每個屬性都在單獨的行中
Ex。
pin attribute
111 4
111 5
111 10
112 4
112 5
...
我試圖找到一個查詢,讓我說「選擇引腳,如果屬性= 4,屬性= 5」
的屬性是顏色,大小等。所以讓所有記錄是紅色(4)和大小小(5)。
在上面的例子中,它會回位銷111和112
邁克
這應該你使用count
與distinct
的工作:
select pin
from attributes
where attribute in (4,5)
group by pin
having count(distinct attribute) = 2
這將返回有任何引腳屬性4和5.
謝謝!它完全按照我的意願工作。 – user2579643
@ user2579643 - np,很高興我能幫上忙! – sgeddes
這是「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;
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');
你仍然有這個查詢有問題嗎? –