mysql - 错误 1093 (HY000) : You can't specify target table 'a' for update in FROM clause

标签 mysql sql hql

我有这个问题

UPDATE trh_adminLoginDate SET superseded = true WHERE EXISTS 
 (SELECT * FROM trh_adminLoginDate AS a2 WHERE a2.adminId = a.adminId AND a2.loginDate > a.loginDate AND a2.clientPlatform = a.clientPlatform)

表格看起来像这样。

+----------------+--------------+------+-----+---------+----------------+
| Field          | Type         | Null | Key | Default | Extra          |
+----------------+--------------+------+-----+---------+----------------+
| id             | bigint(20)   | NO   | PRI | NULL    | auto_increment |
| dateCreated    | datetime     | NO   |     | NULL    |                |
| version        | int(11)      | NO   |     | NULL    |                |
| dateModified   | datetime     | NO   |     | NULL    |                |
| adminId        | bigint(20)   | NO   | MUL | NULL    |                |
| clientPlatform | varchar(255) | YES  |     | NULL    |                |
| loginDate      | datetime     | YES  |     | NULL    |                |
| superseded     | tinyint(1)   | NO   |     | NULL    |                |
+----------------+--------------+------+-----+---------+----------------+

当我执行此查询时,出现以下错误:

ERROR 1093 (HY000): You can't specify target table 'a' for update in FROM clause

我可以创建临时表并保留子查询的结果,然后执行更新。但我不想这样做。有人可以建议我更好的方法吗?

最佳答案

您正在使用别名“a”,但您从未定义它。

也许这会起作用:

UPDATE  trh_adminLoginDate a

        JOIN trh_adminLoginDate AS a2 
        ON a2.adminId = a.adminId 
        AND a2.loginDate > a.loginDate 
        AND a2.clientPlatform = a.clientPlatform

SET a.superseded = true

关于mysql - 错误 1093 (HY000) : You can't specify target table 'a' for update in FROM clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13188002/

相关文章:

mysql - 在sql查询中分配自定义行值

PHP 从 while 循环外部获取变量

mysql - 你如何插入一个类似于SQL语句的列名?在 MySQL 中

postgresql - 多条件等关系的子查询如何写jpql查询

java - 获取 QuerySyntaxException : unexpected token

html - 复选框组可以识别重复区域结果吗?

php: textarea excel 粘贴到数组

java - 将集合展平作为 HQL 查询的一部分?

sql - 不存在或不存在大型数据 Sybase 查询速度非常慢

mysql - 使用联接更新查询。计数器按行数增加