以选择为条件的mysql更新查询

Posted

技术标签:

【中文标题】以选择为条件的mysql更新查询【英文标题】:mysql update query with select as criteria 【发布时间】:2012-08-12 16:01:05 【问题描述】:
UPDATE reservation SET flag = "1" WHERE ipAddress = (SELECT ipAddress FROM reservation WHERE endDate < CURRENT_TIMESTAMP);

我正在尝试使用此查询来更改保留表中日期已过期的那些条目的标志列。 flag 列默认为 0。所以我尝试将 expired once 更改为 1 以供我识别。

我收到以下错误。

ERROR 1093 (HY000): You can't specify target table 'reservation' for updatein FROM clause

有人可以提出解决这个问题的方法吗..

【问题讨论】:

【参考方案1】:

如果您在子选择中使用同一个表,您可以完全省略子选择。 你为什么不使用以下代替

UPDATE reservation 
SET flag = "1" 
WHERE endDate < CURRENT_TIMESTAMP

【讨论】:

天哪,我只是想把事情复杂化!!非常感谢:)【参考方案2】:

你不需要内部的SELECT。您只需要根据endDate 更新flag 状态

UPDATE reservation 
SET flag = "1" 
WHERE endDate < CURRENT_TIMESTAMP

【讨论】:

以上是关于以选择为条件的mysql更新查询的主要内容,如果未能解决你的问题,请参考以下文章

带有子查询的 MySQL 条件更新

MySQL 常用命令

带有 where 条件的 PL/SQL 更新查询作为带有一些空值的选择查询

查询以选择某些条件为真的两个日期之间的列的总和

mysql多条件动态查询

MySQL基本查询