Mysql SQL-选择共享公共值的行组

Mysql SQL-选择共享公共值的行组,mysql,sql,Mysql,Sql,我想检索共享相同ip的帐户 例如,给定以下登录列表: acc ip 1 a 2 b 3 a 4 c 5 d 6 e 1 f 4 b 我想得到这样的东西: acc ip 1 a 3 a 2 b 4 b 像这样的?按字母顺序排列就行了 SELECT acc, ip FROM table WHERE ip IN( SELECT ip FROM table GROUP BY ip HAVING count(ip) >

我想检索共享相同ip的帐户

例如,给定以下登录列表:

acc ip
1   a
2   b
3   a
4   c
5   d
6   e
1   f
4   b
我想得到这样的东西:

acc ip
1   a
3   a
2   b
4   b

像这样的?按字母顺序排列就行了

SELECT acc, ip 
FROM table 
WHERE ip IN(    
    SELECT ip FROM table 
    GROUP BY ip HAVING count(ip) > 1
    ) ORDER BY ip, acc

我发现很难想出一个这样有用的场景,但就是这样:

SELECT acc, ip FROM table1 t
WHERE EXISTS (SELECT * FROM table1 WHERE ip = t.ip AND acc != t.acc);

有很多方法可以做到这一点。这里是一个简单的连接版本

SELECT DISTINCT a.* 
FROM mytable a
JOIN mytable b
  ON a.ip = b.ip 
 AND a.acc<>b.acc
ORDER BY a.ip, a.acc;
选择不同的a.*
从我的表a
加入mytable b
在a.ip=b.ip上
和a.accb.acc
由a.ip、a.acc订购;

它基本上将表与自身连接起来,以查找具有相同IP和另一个帐户的行。
DISTINCT用于使每个帐户/ip组合只显示一次。

这就是您要找的吗

SELECT acc, ip 
FROM mytable 
WHERE ip IN (SELECT ip FROM mytable GROUP BY ip HAVING COUNT(ip)>1)
ORDER BY ip, acc 

绝对不是。你应该自己试试。排序和这个问题有什么关系?看起来OP希望按字母顺序排序。不,他只想选择重复的IP。哦,我误解了。。问题不清楚,因为它没有问这个问题。这没有什么意义。@popovitsj似乎在寻找ip
ip
count>1Try的行,以便更具体地回答您的问题。您是否希望获取与某些条件匹配的所有ip(与其对应的acc),或与某些条件匹配的所有acc(与其对应的ip)?运行此查询,查看是否获得所需结果。它将继续获取其他ip,但是的,这绝对会产生指示的结果。根据我们得到的信息,这个答案是正确的。这个问题询问的是“共享相同ip”的帐户。您的解决方案不寻求任何共享。您拥有的应该是ip而不是ipacc@JohnRuddell除非您使用
DISTINCT
或值可以是
NULL
,否则计算多少并不重要。我是在您编辑注释以提出建议时这样做的。
SELECT DISTINCT a.* 
FROM mytable a
JOIN mytable b
  ON a.ip = b.ip 
 AND a.acc<>b.acc
ORDER BY a.ip, a.acc;
SELECT acc, ip 
FROM mytable 
WHERE ip IN (SELECT ip FROM mytable GROUP BY ip HAVING COUNT(ip)>1)
ORDER BY ip, acc