更新列相同的表

时间:2019-04-25 12:05:35

标签: mysql sql sql-update

当我尝试更新行数据库中的值时遇到问题。我需要更新(增加1小时)到USER表中的especifics用户。

SELECT DATE_ADD(dateOfBirth, INTERVAL 1 HOUR), dateOfBirth 
from USER 
where dateOfBirth like '%23:00:00%';

但是当我执行下一个UPDATE时,显示错误

UPDATE USER
set dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
where id in (select u.id FROM USER u where u.dateOfBirth like '%23:00:00%');

错误:

Error Code: 1093. You can't specify target table 'USER' for update in FROM clause

可以用其他方式执行这句话吗?

3 个答案:

答案 0 :(得分:2)

怎么了?

UPDATE USER
SET dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
WHERE dateOfBirth like '%23:00:00%';

答案 1 :(得分:2)

不需要更新中的子查询。

UPDATE USER
set dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
where dateOfBirth like '%23:00:00%';

答案 2 :(得分:1)

表中的id是否唯一?如果是这样:

update user u
    set dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
where time(u.dateOfBirth) = '23:00:00';

请注意,dateOfBirth显然是日期/时间列(为什么它包含我不明白的时间)。因此,日期/时间函数更适合进行比较。