【问题标题】:Concatenate duplicate rows with additional info (MySQL)使用附加信息连接重复行(MySQL)
【发布时间】:2020-04-18 15:13:39
【问题描述】:

所以我正在寻找一个 MySQL 命令来删除表中的重复数据,如下所示:

ID   origin   firstname   lastname   job         alternative_origin
1    table0   Andrew      Miller     Plumber
2    table1   Andrew      Miller     plumb.
3    table0   Joe         Armstrong  Taylor
4    table1   Phil        Marshall   Carpenter

我想连接所有名字和姓氏相同的行,因此表格如下所示:

ID   origin   firstname   lastname   job         alternative_origin
1    table0   Andrew      Miller     Plumber     table1
3    table0   Joe         Armstrong  Taylor
4    table1   Phil        Marshall   Carpenter

任何帮助将不胜感激。

【问题讨论】:

  • 如果有 3 个或更多的 Andrew Miller 副本会怎样?
  • 我已经查看了重复记录,我没有任何这些案例。理想情况下,将来,如果我添加其他表格,它只会将该信息添加到“替代”列中,例如:“table1table2”。
  • 您是要求SELECT查询,还是要修改表中的数据?
  • 我要修改表格中的数据。

标签: mysql duplicates concatenation


【解决方案1】:

对于每个名称的重复项不能超过 2 个的示例数据,请使用:

update tablename t 
inner join tablename tt 
on tt.firstname = t.firstname and tt.lastname = t.lastname and tt.id > t.id
set t.alternative_origin = tt.origin;

更新表,然后删除重复的行:

delete t
from tablename t inner join tablename tt 
on tt.firstname = t.firstname and tt.lastname = t.lastname and tt.id < t.id;

请参阅demo
结果:

> ID | origin | firstname | lastname  | job       | alternative_origin
> -: | :----- | :-------- | :-------- | :-------- | :-----------------
>  1 | table0 | Andrew    | Miller    | Plumber   | table1            
>  3 | table0 | Joe       | Armstrong | Taylor    | null              
>  4 | table1 | Phil      | Marshall  | Carpenter | null

【讨论】:

  • 非常感谢,我去试试
  • 抱歉回复晚了,项目遇到了障碍。但是,工作就像一个魅力,谢谢。
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 2017-01-27
  • 2014-09-20
相关资源
最近更新 更多