mysql更新字段,其值来自同一表中的另一个字段
我有一张这样的桌子:mysql更新字段,其值来自同一表中的另一个字段,mysql,sql-update,Mysql,Sql Update,我有一张这样的桌子: ---------------------------------- | id | date1 | date2 | type | ---------------------------------- | 1 | NULL | NULL | A | | 1 | NULL | NULL | B | | 1 | NULL | NULL | A | | 1 | NULL | NULL | A
----------------------------------
| id | date1 | date2 | type |
----------------------------------
| 1 | NULL | NULL | A |
| 1 | NULL | NULL | B |
| 1 | NULL | NULL | A |
| 1 | NULL | NULL | A |
| 1 | 2016-08-02 | NULL | C |
| 1 | NULL | NULL | B |
| 2 | NULL | NULL | A |
| 2 | NULL | NULL | A |
| 2 | NULL | NULL | A |
| 2 | NULL | NULL | B |
| 2 | 2016-08-15 | NULL | C |
| 2 | NULL | NULL | B |
----------------------------------
----------------------------------------
| id | date1 | date2 | type |
----------------------------------------
| 1 | NULL | 2016-08-02 | A |
| 1 | NULL | 2016-08-02 | B |
| 1 | NULL | 2016-08-02 | A |
| 1 | NULL | 2016-08-02 | A |
| 1 | 2016-08-02 | NULL | C |
| 1 | NULL | 2016-08-02 | B |
| 2 | NULL | 2016-08-15 | A |
| 2 | NULL | 2016-08-15 | A |
| 2 | NULL | 2016-08-15 | A |
| 2 | NULL | 2016-08-15 | B |
| 2 | 2016-08-15 | NULL | C |
| 2 | NULL | 2016-08-15 | B |
----------------------------------------
我希望通过这样一个简单的查询:
----------------------------------
| id | date1 | date2 | type |
----------------------------------
| 1 | NULL | NULL | A |
| 1 | NULL | NULL | B |
| 1 | NULL | NULL | A |
| 1 | NULL | NULL | A |
| 1 | 2016-08-02 | NULL | C |
| 1 | NULL | NULL | B |
| 2 | NULL | NULL | A |
| 2 | NULL | NULL | A |
| 2 | NULL | NULL | A |
| 2 | NULL | NULL | B |
| 2 | 2016-08-15 | NULL | C |
| 2 | NULL | NULL | B |
----------------------------------
----------------------------------------
| id | date1 | date2 | type |
----------------------------------------
| 1 | NULL | 2016-08-02 | A |
| 1 | NULL | 2016-08-02 | B |
| 1 | NULL | 2016-08-02 | A |
| 1 | NULL | 2016-08-02 | A |
| 1 | 2016-08-02 | NULL | C |
| 1 | NULL | 2016-08-02 | B |
| 2 | NULL | 2016-08-15 | A |
| 2 | NULL | 2016-08-15 | A |
| 2 | NULL | 2016-08-15 | A |
| 2 | NULL | 2016-08-15 | B |
| 2 | 2016-08-15 | NULL | C |
| 2 | NULL | 2016-08-15 | B |
----------------------------------------
要获取的日期将始终是类型C,要更新的字段将始终是日期的相同id,类型A或类型B
有什么建议吗?您可以使用更新的子选择
UPDATE myTable t1
SET date2 = (SELECT MAX(date1)
FROM myTable t2
WHERE t2.id = t1.id)
WHERE t1.type <> 'C'
update my_table
inner join ( select id, date1 from my_table where type ='C') t2
on my_table.id = t2.id
set date2 = t2.date1
where type in ('A','B')
您可以在subselect上使用更新的连接
update my_table
inner join ( select id, date1 from my_table where type ='C') t2
on my_table.id = t2.id
set date2 = t2.date1
where type in ('A','B')
这更好,你只为id计算一次日期。我正在添加更新,但速度太慢:你的答案也很好。但是使用内部联接我认为更面向SQL,也更强大。我的答案解决了问题,但你的可扩展性更强。非常感谢你的支持。。。只是编辑一下。。。从my_table更新my_table内部联接选择id,date1,其中my_table.id=t2.id设置date2=t2.date1,其中type='A'或type='B'@FrancescoG。非常感谢..哪里需要编辑/更新。。代码看起来是一样的。这更好,你只为id计算一次日期。我正在添加更新,但速度太慢:你的答案也很好。但是使用内部连接我认为更面向SQL,也更强大。我的答案解决了问题,但你的可伸缩性更强。非常感谢你的支持。。。只是编辑一下。。。从my_table更新my_table内部联接选择id,date1,其中my_table.id=t2.id设置date2=t2.date1,其中type='A'或type='B'@FrancescoG。非常感谢..哪里需要编辑/更新。。查看代码似乎是一样的。。