sql DELETE FROM t_project_disclose WHERE id IN ( SELECT tpd.id FROM t_project_disclose tpd WHERE tpd.project_plan_id NOT IN ( SELECT opp.ID FROM t_project_disclose tpd JOIN overhaul_project_plan opp ON tpd.project_plan_id = opp.ID ) AND tpd.version_id = 'd2576fc1e2be4258ac8b624b926cc44c'); 报以下错误 You can't specify target table 't_project_disclose' for update in FROM clause
时间: 2024-03-06 07:50:58 浏览: 64
mysql中You can’t specify target table for update in FROM clause错误解决方法
这个错误是因为 MySQL 不支持在一个子查询中更新和查询同一个表。
为了解决这个问题,可以使用临时表或者多层嵌套查询来代替子查询。以下是使用多层嵌套查询的示例 SQL 语句:
```
DELETE FROM t_project_disclose WHERE id IN (
SELECT id FROM (
SELECT tpd.id FROM t_project_disclose tpd
WHERE tpd.project_plan_id NOT IN (
SELECT opp.ID FROM t_project_disclose tpd
JOIN overhaul_project_plan opp ON tpd.project_plan_id = opp.ID
)
AND tpd.version_id = 'd2576fc1e2be4258ac8b624b926cc44c'
) AS tmp
);
```
在这个 SQL 语句中,首先使用了一个 SELECT 语句来获取需要删除的数据的 id,然后将其放入一个临时表 tmp 中,最后使用 DELETE 语句将临时表中的数据从表 `t_project_disclose` 中删除。
请注意,如果数据量很大,使用多层嵌套查询可能会导致性能问题,此时可以考虑使用临时表来解决。
阅读全文