根据名称更新 MySQL 表的重复项数量

问题描述 投票:0回答:1

在我的数据库中,我关注三个字段:Name、time_dupe 和rank_dupe。

“名称”字段是标准化的*,但重复了很多次(重复也可以)。

    • “标准化”是指给定名称的名称始终以相同的方式拼写,并且没有大小写差异。

'time_dupe' 是名称重复的次数。它附加到每个重复记录[见下文]。

“rank_dupe”是我尝试附加到表中的内容。如果记录重复 5 次,我希望“rank_dupe”字段按 1、2、3、4、5 排序,最低“id”编号为 1。

数据如下:

id      name              time_dupe              rank_dupe
66      Joe Bland             4
2622    Joe Bland             4
73      Joe Bland             4
22      Joe Bland             4

99      Mary Fields           2
13      Mary Fields           2

2401    John Saturday         1

我想最终得到什么:

id      name              time_dupe              rank_dupe
22      Joe Bland             4                      1
66      Joe Bland             4                      2
73      Joe Bland             4                      3
2622    Joe Bland             4                      4

13      Mary Fields           2                      1
99      Mary Fields           2                      2

2401    John Saturday         1                      1

此查询将以正确的顺序为我列出记录,但我不知道如何更改它,因此它会更新表:

SELECT
  id,
  name,
  ROW_NUMBER() OVER (
    PARTITION BY name
    ORDER BY id
  ) AS row_num
FROM
  myTable

有人知道如何更改此设置,以便将“row_num”添加到表字段“rank_dupe”吗?

mysql
1个回答
0
投票

使用子查询是一种方法。我猜 id 在桌子上是唯一的。

使用,

UPDATE myTable m
INNER JOIN (SELECT id,
                   ROW_NUMBER() OVER (PARTITION BY name ORDER BY id) AS row_num
            FROM
           myTable 
      ) m1 on m1.id = m.id
SET m.rank_dupe = m1.row_num

参见示例

© www.soinside.com 2019 - 2024. All rights reserved.