Модификация MySQL Query, который удаляет дубликаты - PullRequest
0 голосов
/ 10 июня 2011

У меня такой запрос:

SELECT * FROM 
    (SELECT * FROM persons ORDER BY date DESC) AS p
GROUP BY first_name,last_name,work_phone 

Если вы еще не разобрались, это удаляет записи с дублирующимися именами и рабочими номерами, оставляя только самые последние.В таблице person есть еще одно поле, о котором вы должны знать, это двоичное поле DELETED.

Проблема в том, что если есть дубликат такого типа, я не хочу, чтобы строка рассматривалась, если ееУДАЛЕННОЕ значение равно ИСТИНА, независимо от того, насколько недавно его значение даты.Однако, если в строке нет дубликатов, она должна быть включена в результаты независимо от того, какое значение DELETED она имеет.

Если дубликаты существуют, никогда не будет случая, когда все дубликаты имеют DELETED = TRUE, по крайней мере, один не будетбыть удаленным.

Ответы [ 2 ]

2 голосов
/ 10 июня 2011
SELECT * FROM   
  (SELECT * FROM persons ORDER BY deleted ASC, date DESC) AS p
GROUP BY first_name,last_name,work_phone 
0 голосов
/ 10 июня 2011

Вот как я понимаю проблему:

  1. У вас есть таблица persons с полями first_name, last_name, work_phone, deleted и множество других.
  2. Любые записи, которые имеют одинаковые имя и фамилию, а также рабочий телефон, должны считаться дубликатами.
  3. Следует использовать самый последний неопубликованный дубликат или только самый последний, если все они были удалены.

Вот примерный набросок того, как бы я подошел к проблеме:

  1. Выберите отдельные значения first_name, last_name и work_phone в подзапросе.
  2. Присоедините слева к самой последней восстановленной записи для каждой комбинации в другом подзапросе.
  3. Присоедините слева к самой последней записи для каждой комбинации в третьем подзапросе.
  4. Используйте coalesce, чтобы извлечь значения из второго или третьего подзапроса, в зависимости от того, что не равно нулю.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...