1

例如,我有一个像这样的表:

user ip
a 1.2.3.4
a 1.2.3.4
a 2.4.58.5
b 2.3.4.5
b 2.3.4.5
b 2.3.4.5
b 1.45.5.6 
c 12.4.2.4
c 12.4.2.4
c 1.2.3.4
d 12.4.2.4
d 12.4.2.4
e 1.45.45.45
e 1.45.45.45
f 1.55.55.55

如您所见,用户 a、c 和 d 具有相同的 ip 记录。如何从表中选择此类用户?

我正在使用mysql。

4

2 回答 2

8
SELECT   ip, GROUP_CONCAT(DISTINCT user) AS users
FROM     my_table
GROUP BY ip
HAVING   COUNT(DISTINCT user) > 1

sqlfiddle上查看。

于 2013-05-17T19:28:46.300 回答
2

虽然我喜欢 eggyal 的回答,但问题是“如何从表中选择此类用户?”。因此,我将提供另一个给用户的答案:

select distinct user
from t
where exists (select 1 from t t2 where t2.ip = t.ip and t2.user <> t.user);

并详细说明,如果您想要每个用户的 ip 列表:

select user, count(*) as numIs, group_concat(ip) as IPs
from t
where exists (select 1 from t t2 where t2.ip = t.ip and t2.user <> t.user)
group by user;
于 2013-05-17T20:08:13.267 回答