2016-06-27 3 views
-1

Этой моей структуры таблицы:Поиск дубликатов данных в таблице с помощью 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 
+1

Возможный дубликат [Найти дубликаты записей в MySQL] (http: /stackoverflow.com/questions/854128/find-duplicate-records-in-mysql) –

ответ

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'. Он всегда уникален, поэтому мы можем использовать его для поиска дубликатов записей.

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 

Надеюсь, что это сработает. Пожалуйста, отметьте смещение, как принято, если вы удовлетворены. Благодаря! :)

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

+0

Спасибо !!! работал как я хотел, :) –

+0

Может быть более оптимизирован, попробуйте: SELECT n1. * FROM table_name n1, table_name n2 WHERE n1.'id'

+0

Вы можете сослаться на приведенную ниже ссылку, у нее есть много и очень оптимизированных решений: http://stackoverflow.com/questions/38051373/find-duplicate-data-in-table-using-mysql –

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 
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; 
0

вы также можете сделать это с HAVING, как это :

SELECT COUNT(*) AS cnt, t.* 
FROM yourtable t 
group by emp_id,log_date 
having cnt >1; 
Смежные вопросы