例如,我有一个像这样的表:
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。
SELECT ip, GROUP_CONCAT(DISTINCT user) AS users
FROM my_table
GROUP BY ip
HAVING COUNT(DISTINCT user) > 1
在sqlfiddle上查看。
虽然我喜欢 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;