因帕拉SQL查询与1台,并找到3个主机名普通

问题描述 投票:0回答:2

我有一个表,我试图让所有的用户使用SQL因帕拉有共同的destinationhostnames。

代理表:

sourcehostname destinationhostname
comp1          google.com
comp2          google.com
comp1          yahoo.com
comp1          facebook.com
comp2          facebook.com
comp3          facebook.com

当我运行以下从2个源主机名这部作品的一个表拿回不同目的地的主机名:

SELECT DISTINCT t1.destinationhostname
FROM proxy_table t1 JOIN proxy_table t2
  ON t1.destinationhostname = t2.destinationhostname AND t1.sourcehostname  ="comp1" AND t2.sourcehostname="comp2";

它返回:

google.comfacebook.com

我试图返回值,其中comp1 comp2comp3都有着共同的东西这将是facebook.com,但我不能让这个查询完全正确:

SELECT DISTINCT t1.destinationhostname
FROM proxy_table t1 JOIN proxy_table t2 JOIN proxy_table t3
  ON t1.destinationhostname = t2.destinationhostname AND t1.sourcehostname  ="comp1" AND t2.sourcehostname="comp2" t3.sourcehostname = "comp3";

在查询我想因为有成千上万的人,但我只想选择特定的人来指定不同的3台电脑。

sql impala
2个回答
1
投票

使用聚集。假设没有重复的行:

select destinationhostname
from proxy_table 
group by destinationhostname
having count(*) = (select count(distinct sourcehostname) from proxy_table);

如果你能有重复的行,只是改变了having

having count(distinct sourcehostname) = (select count(distinct sourcehostname) from proxy_table);

如果你想要的是三个用户,那么就使用= 3


1
投票

你可以试试下面。

SELECT DISTINCT t1.destinationhostname
FROM proxy_table t1 JOIN proxy_table t2
ON t1.destinationhostname = t2.destinationhostname 
JOIN proxy_table t3
ON t1.destinationhostname = t3.destinationhostname 
and t2.destinationhostname = t3.destinationhostname 
WHERE
t1.sourcehostname  ="comp1" 
AND t2.sourcehostname="comp2"
AND t3.sourcehostname = "comp3";

让我知道,如果你面对的问题

© www.soinside.com 2019 - 2024. All rights reserved.