当我尝试更新行数据库中的值时遇到问题。我需要更新(增加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
可以用其他方式执行这句话吗?
答案 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
显然是日期/时间列(为什么它包含我不明白的时间)。因此,日期/时间函数更适合进行比较。