问题描述
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 Name
和Unique
列
UPDATE TABLE
SET SignUp = 'April2020',SignUp)
WHERE SignUp = 'August2020'