mysql 使用同一个表中另一个字段的值更新字段

Fra*_* G. 1 mysql sql-update

我有一张这样的表:

----------------------------------
| 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    |
----------------------------------
Run Code Online (Sandbox Code Playgroud)

我希望通过这样的单个查询变成:

----------------------------------------
| 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    |
----------------------------------------
Run Code Online (Sandbox Code Playgroud)

要获取的日期将始终为“类型 C”,要更新的字段将始终与日期和“类型 A”或“类型 B”的 ID 相同

有什么建议吗?

sca*_*dge 5

您可以在子选择上使用更新加入

 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')
Run Code Online (Sandbox Code Playgroud)