根据ID删除数据,代码如下:
DELETE
FROM
t_swcas_db_sync_send_task
WHERE
id IN (
SELECT
b.id AS id
FROM
t_swcas_db_old_part_back a
INNER JOIN t_swcas_db_sync_send_task b ON a.ID = b.REF_ID
WHERE
WARRANTY_PARTS_STATUS = '已收货'
)
执行异常信息
[Err] 1093 - You can’t specify target table ‘t_swcas_db_sync_send_task’ for update in FROM clause
#SQL调整
DELETE
FROM
t_swcas_db_sync_send_task
WHERE
id IN (
SELECT
id
FROM
(
SELECT
b.id AS id
FROM
t_swcas_db_old_part_back a
INNER JOIN t_swcas_db_sync_send_task b ON a.ID = b.REF_ID
WHERE
WARRANTY_PARTS_STATUS = '已收货'
) AS n
)
执行成功
原因分析
in 条件里的查询结果需要 重命名才能语法通过。
再试一下查询
select *
FROM
t_swcas_db_sync_send_task
WHERE
id IN (
SELECT
b.id AS id
FROM
t_swcas_db_old_part_back a
INNER JOIN t_swcas_db_sync_send_task b ON a.ID = b.REF_ID
WHERE
WARRANTY_PARTS_STATUS = '已收货'
)
没问题,不知道删除为什么要限制,查询不限制。。不纠结,记录下这个坑。。。
本文详细解析了在MySQL中使用子查询进行数据删除时遇到的语法错误,特别是当目标表出现在FROM子句中时的限制。通过调整查询结构,即将子查询结果集重命名为临时表,成功绕过了这一限制,实现了预期的数据删除操作。

3万+

被折叠的 条评论
为什么被折叠?



