Поиск дублированных данных в базе данных MySQL с использованием подстановочного знака - PullRequest
0 голосов
/ 04 июля 2018

Я изо всех сил пытаюсь создать рабочий запрос, который будет искать возможные дубликаты данных в нашей базе данных.

Использование обычных методов не работает, поскольку данные, которые выглядят так, как 123456 и 123 456, должны считаться одинаковыми.

Помогите, пожалуйста, мне, ребята, написать запрос, который будет искать подобные дубликаты.

Все данные находятся в одном поле, назовем его «число».

Sample data: 
id                    | number
0                     | 123456
1                     | 124355
2                     | 123432
3                     | 123 456

Expected output:
id               | number
0                | 123456
3                | 123 456

Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Я предлагаю альтернативное решение, которое использует трюк замены, использованный из @scaisEdge в правильном ответе.

SELECT 
  a.id, a.number, b.id as dup_id, b.number as dup_number 
FROM 
  mytable a,
  mytable b
WHERE
  a.id <> b.id and
  a.number = replace(b.number, ' ', '');

Это создает «отчет», чтобы определить, какое значение является «исходным» и «дублированным».

Я создал эту sql скрипку , чтобы экспериментировать с двумя подходами.

0 голосов
/ 04 июля 2018

Вы можете заменить пробелы, например:

  select replace(number, ' ', '')  , count(*)
  from my_table 
  group by replace(number, ' ', '')

и для получения строк отфильтруйте результат, имеющий count (*)> 1

select * from my_table m 
inner join (
  select replace(number, ' ', '') my_val , count(*)
  from my_table 
  group by my_val
  having count(*) > 1

) t on  t.my_val = m.replace(number, ' ', '') 
...