Mysql SQL-选择共享公共值的行组
我想检索共享相同ip的帐户 例如,给定以下登录列表: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) >
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