【问题标题】:Find duplicate fields in database, and update field in row在数据库中查找重复字段,并更新行中的字段
【发布时间】:2019-05-31 19:59:56
【问题描述】:

好的,所以我有一个有 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 查询来检查表中名称字段中的重复名称,如果重复,则将 dupe 字段标记为 1。

所以第 1 行和第 2 行中的重复字段应为“1”,其余应为“0”。

感谢您提供的任何帮助!我希望我解释得对。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您可以在 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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-07-17
        • 1970-01-01
        • 2014-11-20
        • 2016-08-05
        • 2011-06-23
        • 2020-06-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多