Mysql 更新同一表中的列
尝试更新行数据库中的值时出现问题。我需要更新(添加1小时)到用户表中的特定用户Mysql 更新同一表中的列,mysql,sql,sql-update,Mysql,Sql,Sql Update,尝试更新行数据库中的值时出现问题。我需要更新(添加1小时)到用户表中的特定用户 SELECT DATE_ADD(dateOfBirth, INTERVAL 1 HOUR), dateOfBirth from USER where dateOfBirth like '%23:00:00%'; 但是当我执行下一次更新时,显示一个错误 UPDATE USER set dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR) where id in
SELECT DATE_ADD(dateOfBirth, INTERVAL 1 HOUR), dateOfBirth
from USER
where dateOfBirth like '%23:00:00%';
但是当我执行下一次更新时,显示一个错误
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
有可能用其他方式执行这个句子吗?表中的
id
不是唯一的吗?如果是:
update user u
set dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
where time(u.dateOfBirth) = '23:00:00';
请注意,
dateOfBirth
显然是一个日期/时间列(为什么它包含一个我不理解的时间)。因此,日期/时间函数更适合于比较。表中的id
不是唯一的吗?如果是:
update user u
set dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
where time(u.dateOfBirth) = '23:00:00';
请注意,dateOfBirth
显然是一个日期/时间列(为什么它包含一个我不理解的时间)。因此,日期/时间函数更适合进行比较。有什么问题:
UPDATE USER
SET dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
WHERE dateOfBirth like '%23:00:00%';
有什么问题吗
UPDATE USER
SET dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
WHERE dateOfBirth like '%23:00:00%';
更新中的子查询不是必需的
UPDATE USER
set dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
where dateOfBirth like '%23:00:00%';
更新中的子查询不是必需的
UPDATE USER
set dateOfBirth = DATE_ADD(dateOfBirth, INTERVAL 1 HOUR)
where dateOfBirth like '%23:00:00%';
USER
是保留的mysql关键字出生日期需要时间吗?也许约会类型会使一些事情变得更简单。我越是关注这里正在做的事情,它就越像是对由于时区或夏/冬时钟变化时间打嗝而发生的事情的修复。因此,只要将列设为日期类型,就可以避免再次出现这种情况USER
是保留的mysql关键字出生日期需要时间吗?也许约会类型会使一些事情变得更简单。我越是关注这里正在做的事情,它就越像是对由于时区或夏/冬时钟变化时间打嗝而发生的事情的修复。因此,只需将该列设置为日期类型,避免再次出现“为什么它包含一个我不明白的时间”这样的问题,如果您需要计算精确的年龄计算怎么办?Annyhow+1Hi@RaymondNijland我很想知道一个情况,我的年龄需要准确地知道:)但是我是一个老吉特Hello@RiggsFolly在医院也许或者你的评论是一个反问:-)@RaymondNijland。该列称为dateOfBirth。所谓的日期应该是日期。而且,特别是像“出生日期”这样的东西,在列中包含时间成分确实是误导。如果这是一家医院,那么DatetimeOfBirth
将是合适的。看看查询正在做什么,我会猜测这是一个时区或时钟变化问题的修复,而不是日期列的问题:)“为什么它包含时间我不明白”如果需要计算精确的年龄计算怎么办?Annyhow+1Hi@RaymondNijland我很想知道一个情况,我的年龄需要准确地知道:)但是我是一个老吉特Hello@RiggsFolly在医院也许或者你的评论是一个反问:-)@RaymondNijland。该列称为dateOfBirth。所谓的日期应该是日期。而且,特别是像“出生日期”这样的东西,在列中包含时间成分确实是误导。如果这是一家医院,那么DatetimeOfBirth
将是合适的。查看查询正在执行的操作,我会猜测这是对时区或时钟更改问题的修复,而不是日期列的问题:)