gpt4 book ai didi

mysql - 找到并重命名重复项

转载 作者:行者123 更新时间:2023-11-29 05:55:58 25 4
gpt4 key购买 nike

存在一个baz 表:

+----+-------+
| id | label |
+----+-------+
| 1 | foo |
+----+-------+
| 2 | foo |
+----+-------+
| 3 | bar |
+----+-------+

目标是:

  • 通过将 UNIQUE 索引添加到 label 列来更改表;
  • 找到并重命名重复的 label 字段;

注意:我想避免复制表格,因为它可能有数千个唯一字段,而只有 2-3 个重复项。

注意 2: 我想使用 id 作为重命名标签的后缀,例如第二个 foo 变成 foo_2.


添加索引:

ALTER TABLE baz ADD UNIQUE (label);

现在查找和重命名重复项的最佳方法是什么?


编辑:我想:

UPDATE (SELECT label, COUNT(*) c FROM baz GROUP BY label HAVING c > 1) t 
SET t.label = (t.label + t.id);

UPDATE baz t1 INNER JOIN baz t2
SET t2.label = t2.label + t2.id
WHERE t1.label = t2.label;

基本上它会:

  1. 使用SELECT查询获取重复项;
  2. 处理查询并设置 label 的值,例如 label + id;

最佳答案

在 MySQL 中,您可以使用变量添加后缀:

set @l = '';
set @rn = 0;

update baz
set label = concat_ws('_', label,
if(@l = label, @rn := @rn + 1,
nullif(if(@l := label, @rn := 0, @rn := 0), 0)
)
)
order by label, id;

关于mysql - 找到并重命名重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49382686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com