使用mysql在表中查找重复数据

时间:2016-06-27 10:17:49

标签: mysql

这是我的表结构:

id    emp_id    log_date
1        1      2015-1-1
2        1      2015-1-1
3        1      2015-1-2
4        2      2015-1-1
5        2      2015-1-2
6        2      2015-1-2

我想单独为每log_date个提取emp_id

预期产出:

id    emp_id    log_date
1        1      2015-1-1
2        1      2015-1-1
5        2      2015-1-2
6        2      2015-1-2

5 个答案:

答案 0 :(得分:1)

您可以通过多种方式找到重复记录。 一些如下: 1。

SELECT * FROM `table_name` GROUP BY emp_id, log_date having count(emp_id) > 1;

通过以下查询,您可以获取记录重复的确切时间。

SELECT emp_id, count(*) as cnt FROM `table_name` GROUP BY log_date having cnt > 1 ORDER BY cnt desc=;

第二种方法是使用'id'的自动增量ID。它始终是唯一的,因此我们可以使用它来查找重复的记录。

SELECT n1.* FROM table_name n1, table_name n2 WHERE n1.`id` < n2.`id` AND n1.emp_id = n2.emp_id AND n1.log_date = n2.log_date

希望这会奏效。如果您满意,请将anset标记为已接受。谢谢! :)

答案 1 :(得分:1)

您可以使用下面提到的查询来获得所需的结果:

select id,emp_id,log_data from table group by emp_id,log_data;

如果您只想要重复数据,请使用:

select id,emp_id,log_data from table group by emp_id,log_data having count(1)>1;

答案 2 :(得分:0)

试试这个;)

select t1.*
from yourtable t1
inner join (
    select emp_id, log_date from yourtable group by emp_id, log_date having count(*) > 1
) t2 on t2.emp_id = t1.emp_id and t2.log_date = t1.log_date

SQLFiddle DEMO HERE

答案 3 :(得分:0)

您可以按如下方式使用cross join。查询只是检查数据是否匹配,但id没有。

SELECT t1.* 
FROM
tablename t1, tablename t2
WHERE t1.id <> t2.id 
AND t1.emp_id = t2.emp_id
AND t1.log_date = t2.log_date

答案 4 :(得分:0)

您也可以使用 HAVING 这样做:

SELECT COUNT(*) AS cnt, t.*
FROM yourtable t
group by emp_id,log_date
having cnt >1;
相关问题