Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql更新字段,其值来自同一表中的另一个字段_Mysql_Sql Update - Fatal编程技术网

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。非常感谢..哪里需要编辑/更新。。查看代码似乎是一样的。。