2013-12-16 22 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

相关问题