2013-12-16 21 views
1

我正在使用MySql 5,我想知道是否可以使用sql語法獲得以下值。用於獲取具有常用列值的行值的SQL語法

這是獲得價值節點包括在第1組,並在第2組和第3

Hosts | groups 
    1  1 
    1  2 
    1  3 
    2  1 
    3  1 ----->for this example host 1 and 3 are the value which I need 
    3  2 
    3  3 
    4  1 

本組1是主列表,是否意味着我需要獲得所有主機包括1組這是也包括在組2和3中。

如果可能,有人可以舉個例子嗎?

+0

到目前爲止您嘗試了哪些SQL? –

回答

2

的經常提到group by hosts having count(distinct groups) = 3的回答,它確實給出了正確的答案。但是下面的查詢也適用,如果你有一個合適的索引,通常會更好。如果我記得,該指數應該在(hosts,groups)

SELECT t1.hosts 
FROM MyTable AS t1 
INNER JOIN MyTable AS t2 USING (hosts) 
INNER JOIN MyTable AS t3 USING (hosts) 
WHERE (t1.groups, t2.groups, t3.groups) = (1, 2, 3) 

請參閱我的演示文稿SQL Query Patterns, Optimized以瞭解此類查詢的一些分析。

+0

偉大的工作!但現在我試圖內部連接不同的表,以獲得最終列表中每一行的新值「nodeName」......我要更新我的代碼以查看我正在嘗試執行的操作。 – Sallyerik

+0

好的解決,只需要用新的表值創建一個新的內部聯接。非常感謝您的時間!順便說一句,演示文稿是偉大的,再次感謝分享它。 – Sallyerik

3

您應該能夠使用的WHEREGROUP BYHAVING的組合來得到結果:

select hosts 
from yourtable 
where groups in (1, 2, 3) 
group by hosts 
having count(distinct groups) = 3; 

SQL Fiddle with Demo

+0

它的工作原理。我選擇了內部連接的答案,因爲它對我更合適。 – Sallyerik

1

你可以嘗試這樣的事:

select distinct Hosts 
from myTABLE 
where Hosts in (
    select Hosts from myTABLE where Groups = 1) 
AND Hosts in (
    select Hosts from myTABLE where Groups = 2) 
AND Hosts in (
    select Hosts from myTABLE where Groups = 3) 
Order by Hosts 
+0

也適用。謝謝! – Sallyerik

相關問題