mysql - 选择和删除

标签 mysql sql innodb mysql-error-1093

我需要从表中删除某些行。必须删除哪些行是我通过查询发现的。然而,it appears that you cannot do both operations (select and delete) in the same query :

Currently, you cannot delete from a table and select from the same table in a subquery.

所以我不能这样做:

DELETE
FROM telefono
WHERE telefono_id IN (
    SELECT te.telefono_id
    FROM telefono te
    LEFT JOIN centro_telefono ce ON te.telefono_id=ce.telefono_id AND ce.telefono_id IS NOT NULL
    LEFT JOIN contacto_telefono co ON te.telefono_id=co.telefono_id AND co.telefono_id IS NOT NULL
    WHERE COALESCE(ce.telefono_id, co.telefono_id) IS NULL AND te.fecha_alta < DATE_SUB(NOW(), INTERVAL 1 DAY)
);
-- SQL Error (1093): You can't specify target table for update in FROM clause

如何在纯 MySQL 中实现此记录清理?

服务器运行 MySQL 5.1.39。

最佳答案

尝试使用连接执行删除语句

DELETE te
FROM telefono as te
    LEFT JOIN centro_telefono ce
        ON te.telefono_id=ce.telefono_id AND ce.telefono_id IS NOT NULL
    LEFT JOIN contacto_telefono co
        ON te.telefono_id=co.telefono_id AND co.telefono_id IS NOT NULL
WHERE
    COALESCE(ce.telefono_id, co.telefono_id) IS NULL
    AND te.fecha_alta < DATE_SUB(NOW(), INTERVAL 1 DAY)

关于mysql - 选择和删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3606451/

相关文章:

mysql - MySQL 数据库损坏,只能通过 innodb_force_recovery=6 进行访问

php - 如何将值存储到电报机器人的 webhook PHP session 中

Mysql计数没有重复

php - SQL插入语句不起作用

sql - "bad double value"在 Google BigQuery 中

mysql - InnoDB 中的自动增量值?

php - MySQL - 触发器调用两次导致死锁

mysql - Spring Hibernate MySQL 测试不回滚

mysql - 按日期 ASC 排序,但组内按 DESC 排序

php - 如何将 mysql 数据的输入与 php/sql 进行比较?