MySQL-通过串联每一行的字段来更新列

问题描述

我有一个这样的表:

ID  Name   SignUp          Unique
1   James  August2020      JamesAugust2020  
2   Tom    August2020      TomAugust2020
3   Dick   September2020   DickSeptember2020
4   Larry  June2020        LarryJune2020
5   Sam    July2020        SamJuly2020
6   John   July2020        JohnJuly2020
7   Frank  march2020       Frankmarch2020
8   Jason  August2020      JasonAugust2020

如果“ SignUp”列要更改,我想运行一个更新查询,该查询将连接并更新具有相同“ SignUp”日期的每个人的唯一列为新的“ SignUp”日期。

请参阅示例(如果所有“注册”日期都从2020年8月更改为2020年4月,我希望进行以下操作)

ID  Name   SignUp          Unique
1   James  April2020       JamesApril2020  
2   Tom    April2020       TomApril2020
3   Dick   September2020   DickSeptember2020
4   Larry  June2020        LarryJune2020
5   Sam    July2020        SamJuly2020
6   John   July2020        JohnJuly2020
7   Frank  march2020       Frankmarch2020
8   Jason  April2020       JasonApril2020

我该如何使用MysqL中的更新语句来做到这一点?

解决方法

如果您希望unique是其他两列的串联,则应将其定义为生成的列:

alter tab t add column `unique` varchar(255) generated always as
    ( concat(name,signup) );

然后在查询表并且不需要(甚至可能)更新列时生成它。

,

您可以这样做:

UPDATE tablename
SET SignUp = 'April2020',`Unique` = CONCAT(Name,SignUp)
WHERE SignUp = 'August2020'

在此作业中:

`Unique` = CONCAT(Name,SignUp)

MySql使用更改后的值SignUp

请参见demo
结果:

| ID  | Name  | SignUp        | Unique            |
| --- | ----- | ------------- | ----------------- |
| 1   | James | April2020     | JamesApril2020    |
| 2   | Tom   | April2020     | TomApril2020      |
| 3   | Dick  | September2020 | DickSeptember2020 |
| 4   | Larry | June2020      | LarryJune2020     |
| 5   | Sam   | July2020      | SamJuly2020       |
| 6   | John  | July2020      | JohnJuly2020      |
| 7   | Frank | March2020     | FrankMarch2020    |
| 8   | Jason | April2020     | JasonApril2020    |
,

一个选项是在REPLACE()列中使用Unique

UPDATE tab
   SET `SignUp` = 'April2020',`Unique` = REPLACE(`Unique`,'August2020','April2020')
 WHERE `SignUp` = 'August2020'

SignUp列更新期间

,

表结构:

ID  Name   SignUp          Unique
1   James  August2020      JamesAugust2020  
2   Tom    August2020      TomAugust2020
3   Dick   September2020   DickSeptember2020
4   Larry  June2020        LarryJune2020
5   Sam    July2020        SamJuly2020
6   John   July2020        JohnJuly2020
7   Frank  March2020       FrankMarch2020
8   Jason  August2020      JasonAugust2020

如果所有“注册”日期都将从2020年8月更改为2020年4月。

您可以使用2种方法进行更新:

方法1:

UPDATE TABLE
SET SignUp='April2020',UNIQUE = REPLACE(UNIQUE,'APRIL2020')
WHERE SignUp='August2020';

您可以查看REPLACE

的详细文档

方法2:

或者您可以尝试另一种方式,concat NameUnique

UPDATE TABLE
SET SignUp = 'April2020',SignUp)
WHERE SignUp = 'August2020'