首页 > 解决方案 > 用它的前一列值更新表的新列,并用重复值连接 id

问题描述

我有一张表,有 3 列 id,name,new_column 所以我的要求是将名称列值添加到 new_column 但如果 namae 列有重复值,那么 new_column 中的值应该是 id+name 值的组合

表结构

id  name   new_name (empty column)

1  aaa
2  bbb
3  ccc
4  ddd
5  aaa
6  eee
7  ccc

现在预期的输出

id 名称 new_name(空列)

1  aaa     aaa
2  bbb     bbb
3  ccc     ccc     
4  ddd     ddd
5  aaa     5aaa (due to duplicate value id + name )
6  eee     eee
7  ccc     7ccc (due to duplicate value id + name )

标签: mysqlsql

解决方案


如果你的 MySQL 版本支持ROW_NUMBER+ 窗口函数,你可以尝试使用 that make a seq numberCASE WHEN来判断是否重复

架构 (MySQL v8.0)

CREATE TABLE T(
   id int,
   name varchar(50)
);


    
INSERT INTO T VALUES (1,'aaa');
INSERT INTO T VALUES (2,'bbb');
INSERT INTO T VALUES (3,'ccc');
INSERT INTO T VALUES (4,'ddd');
INSERT INTO T VALUES (5,'aaa');
INSERT INTO T VALUES (6,'eee');
INSERT INTO T VALUES (7,'ccc');

查询 #1

SELECT name, 
      CASE WHEN rn = 1 THEN name ELSE CONCAT(id,name) END new_name 
FROM (
  SELECT  *,ROW_NUMBER() OVER(PARTITION BY name ORDER BY id) rn
  FROM T
) t1
ORDER BY id;
姓名 新名字
啊啊啊 啊啊啊
bbb bbb
ccc ccc
ddd ddd
啊啊啊 5aaa
eee eee
ccc 7cc

在 DB Fiddle 上查看


推荐阅读