Найти дубликаты полей в базе данных и обновить поле в строке - PullRequest
1 голос
/ 31 мая 2019

Хорошо, у меня есть таблица с 3000 строками. Каждая строка уникальна, однако некоторые поля дублируются. Я хочу обновить строки с полями, которые дублируются. Мне трудно выразить это словами, извините, если я все понял неправильно.

For example, the table looks like this: 

+----+--------+--------+-----------+-------+-------+------+--+
| id |  name  | place  |    day    | time1 | time2 | dupe |  |
+----+--------+--------+-----------+-------+-------+------+--+
|  1 | George | Garden | Sunday    | 12:00 | 13:00 |    0 |  |
|  2 | George | House  | Monday    | 15:00 | 18:00 |    0 |  |
|  3 | David  | School | Wednesday | 15:00 | 18:00 |    0 |  |
|  4 | Stan   | Church | Sunday    | 12:00 | 13:00 |    0 |  |
+----+--------+--------+-----------+-------+-------+------+--+

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

Таким образом, поля дубликатов в строках 1 и 2 должны быть равны «1», а остальные - «0».

Спасибо за любую помощь, которую вы можете оказать! Надеюсь, я все правильно объяснил.

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Вы можете использовать EXISTS в операторе CASE:

select
  t.*,
  case 
    when exists (
      select 1 from tablename
      where id <> t.id and name = t.name
    ) then 1
    else 0
  end dupe
from tablename t
1 голос
/ 31 мая 2019

Кажется, вам важно только поле name. Итак:

update t join
       (select name
        from t
        group by name
        having count(*) >= 2
       ) dups
       on t.name = dups.name
    set dups = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...