在数据库中查找重复的字段,并在行中更新字段

时间:2019-05-31 19:59:56

标签: mysql sql

好的,所以我有一个包含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查询,检查表中name字段中是否有重复的名称,如果重复字段将dupe字段标记为1,请执行以下操作。

因此,第1行和第2行中的dupe字段应为“ 1”,其余字段应为“ 0”。

感谢您可能提供的任何帮助!我希望我解释正确。

2 个答案:

答案 0 :(得分:2)

您可以在CASE语句中使用EXISTS:

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 :(得分:1)

您似乎只关心name字段。所以:

update t join
       (select name
        from t
        group by name
        having count(*) >= 2
       ) dups
       on t.name = dups.name
    set dups = 1;