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

使用mysql查找表中的重复数据,mysql,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 我想分别为每个emp\u id提取重复的log\u日期 预期产出: id emp_id log_date 1

这是我的表格结构:

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
我想分别为每个
emp\u id
提取重复的
log\u日期

预期产出:

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
试试这个;)


您可以使用
交叉连接
,如下所示。查询只是检查数据是否匹配,但是
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
选择t1.*
从…起
表名t1,表名t2
其中t1.id t2.id
t1.emp_id=t2.emp_id
t1.log\u date=t2.log\u date

您可以通过多种方式找到重复记录。 其中一些建议如下: 一,

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

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
从表名n1、表名n2中选择n1.*其中n1.`id`

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

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

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;

您也可以通过如下方式使用进行操作:

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

可能会有更优化的方法,请尝试以下方法:选择n1.*从表名n1,表名n2,其中n1.
id
id
和n1.emp\u id=n2.emp\u id和n1.log\u date=n2.log\u date您可以参考下面的链接,它有许多非常优化的解决方案:@AmanGarg哇,您想让我做什么?接受你的回答?
select id,emp_id,log_data from table group by emp_id,log_data having count(1)>1;
SELECT COUNT(*) AS cnt, t.*
FROM yourtable t
group by emp_id,log_date
having cnt >1;