1093 - You can't specify target table 'asks_over_time' for update in FROM clause
时间: 2023-12-21 09:06:46 浏览: 93
这个错误是因为 MySQL 不允许在 UPDATE 语句中直接使用被更新的表(这里是 asks_over_time)作为子查询的源表,否则会导致死锁的风险。因此,需要对该 SQL 语句进行改写。
一种常见的方法是使用一个临时表来保存要更新的记录的主键,然后在 UPDATE 语句中引用这个临时表。具体来说,可以将子查询中的结果保存到一个临时表中,然后在 UPDATE 语句中引用这个临时表来更新 asks_over_time 表。改写后的 SQL 语句如下:
```
CREATE TEMPORARY TABLE temp_table
SELECT t1.ask_id
FROM asks t1
INNER JOIN asks_over_time t2 ON t1.ask_id = t2.ask_id
WHERE t2.is_accepted = 1 AND t1.handle_time IS NOT NULL
AND t1.handle_time != '' AND t1.handle_time >= t2.create_time;
UPDATE asks_over_time
SET is_replied = 1
WHERE ask_id IN (SELECT ask_id FROM temp_table);
DROP TEMPORARY TABLE IF EXISTS temp_table;
```
这样就可以避免出现 "You can't specify target table 'asks_over_time' for update in FROM clause" 的错误。同时,使用临时表可以提高 SQL 语句的执行效率。
阅读全文