如何从表中只选择双匹配的记录?

时间:2013-05-17 19:26:32

标签: mysql sql

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

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。

2 个答案:

答案 0 :(得分:8)

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

sqlfiddle上查看。

答案 1 :(得分: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;