ОШИБКА 1093 (HY000): вы не можете указать целевую таблицу «a» для обновления в предложении FROM

У меня есть этот запрос

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 

Я могу создать временную таблицу и сохранить результат подзапроса, а затем выполнить UPDATE. Но я не хочу этого делать. Может ли кто-нибудь предложить мне лучший способ сделать это?

Вы используете псевдоним «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 

Или, возможно, это сделает трюк:

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