mysql — поиск дубликатов пользователей с заменой имени / фамилии

#mysql #duplicates

#mysql #дубликаты

Вопрос:

Мне нужно найти пользователей, которые были дважды вставлены в таблицу, но с заменой их имени и фамилии.

например, Боб Смит находится в базе данных как

 firstname:Bob 
lastname:Smith
amp;
firstname:Smith
lastname:Bob
  

Какой наилучший запрос для поиска этих пользователей?

На сервере работает mysql.

Ответ №1:

 Select 
  *
FROM UserTable ut
JOIN UserTable ut2 on ut2.firstname = ut.lastname and ut2.lastname = ut.firstname
  

Комментарии:

1. Это хорошо работает с «ut.user_id, ut.firstname, ut.lastname, ut2.user_id, ut2.firstname, ut2.lastname» вместо * (немного уменьшенный набор данных), а также «порядок по ut2.firstname, ut2.lastname» в конце

2. @Ben вы не уточнили, какие данные вы хотели вернуть. Многие из вас хотят обновить свой вопрос.

3. Никакого давления, я просто добавляю некоторые отзывы

Ответ №2:

 SELECT
    firstname, lastname
FROM
    (
    SELECT firstname, lastname FROM MyTable -- WHERE firstname <> lastname
    UNION ALL
    SELECT lastname, firstname FROM MyTable -- WHERE firstname <> lastname
    ) foo
GROUP BY
   firstname, lastname
HAVING 
   COUNT(*) > 1
  

Комментарии:

1. Мне нравится это решение. Хороший способ получить единый результат для каждого дубликата.

2. @john amp; gbn. Да, но в то же время мне нужно было бы знать, каковы идентификаторы этих записей

3. @Ben: возможно, вы захотите игнорировать строки, в которых имена совпадают. Я хотел прокомментировать это. Чтобы получить идентификаторы, самосоединение проще быть честным. Это можно сделать здесь, но это становится более сложным, чем самосоединение

4. @gbn. Хорошие усилия по удалению дубликатов, но мне нужны эти дубликаты, чтобы я мог получить идентификаторы

Ответ №3:

 SELECT orig.firstname, orig.lastname
FROM yourtable AS orig
INNER JOIN yourtable AS dupes ON orig.firstname = dupe.lastname AND orig.lastname = dupe.firstname
  

В принципе, выполните самосоединение в таблице пользователей, но только в тех записях, где происходит дублирование fn / ln.