在“ SQL”列中查找重复项

时间:2019-02-11 16:50:30

标签: mysql sql

我有一个名为log的表

ID   User_ID   Machine_Number   Email 
1     100         12345          jim@gmail.com
2     100         12345          jim@gmail.com
3     101         67890          bill@gmail.com
4     102         12345          steve@gmail.com

我需要找到具有相同Machine_Number的用户的User_ID。在这种情况下,我需要返回100和102的查询。

我尝试过:

SELECT user_id, COUNT(machine_number) 
FROM log
GROUP BY machine_number
HAVING COUNT(machine_number) > 1

但这给出了每次出现的machine_number的计数,即 用户ID计数(机器编号)

100          2
101          1
102          1

有什么建议吗?

6 个答案:

答案 0 :(得分:1)

我想您想在同一台计算机上同时获得两个user_id。尝试minimize

group_concate

答案 1 :(得分:0)

我假设您的意思是不同用于同一台计算机。您可以像这样使用exists来获取原始行:

select l.*
from log l
where exists (select 1
              from log l2 
              where l2.machine_number = l.machine_number and l2.email <> l.email
             );

这应该具有非常好的性能,尤其是在(machine_number, email)上具有索引的情况下。

答案 2 :(得分:0)

使用存在

select distinct t1.* from log t1 where exists
( select 1 from log t2 where t1.machine_number=t2.machine_number
 group by machine_number having count(*)>1
)

答案 3 :(得分:0)

SELECT user_id,Machine_Number 
FROM log where Machine_Number IN 
     (SELECT Machine_Number FROM log GROUP BY Machine_Number HAVING count(1) > 1) 
ORDER BY Machine_Number;

如果要使用不同的user_id,请在下面使用。

SELECT distinct user_id, Machine_Number
FROM log where Machine_Number IN
(SELECT Machine_Number FROM log GROUP BY Machine_Number HAVING count(1) > 1) 
ORDER BY Machine_Number;

答案 4 :(得分:0)

下面的代码采用MS SQL语法,但我认为它将在MYSQL中正常工作。

sed 's/\(^[^_]*_[^_]*\)\(_[0-9]\{1,\}\)\([[:blank:]]\{1,\}.*\)/\1\3/' infile

答案 5 :(得分:0)

Select DISTINCT M.User_Id, M.Machine_NUmber from Machine M  
Inner Join (Select M1.Machine_NUmber from Machine M1 Group By M1.Machine_NUmber Having COUNT(M1.Machine_NUmber)>1) M2 
On M.Machine_NUmber = M2.Machine_NUmber