mysql - Fun with MySQL - 如何使用 IN 编写删除语句

标签 mysql sql sql-delete

当我尝试

DELETE FROM `TreePaths` WHERE `descendant` IN (SELECT `descendant` FROM `TreePaths` WHERE `ancestor`= 0x04);

我明白了

#1093 - You can't specify target table 'TreePaths' for update in FROM clause

我怎样才能让删除生效?

更新: 表结构:

CREATE TABLE TreePaths (
    ancestor        VARBINARY(16) NOT NULL,
    descendant      VARBINARY(16) NOT NULL,
    PRIMARY KEY (`ancestor`, `descendant`),
    FOREIGN KEY (`ancestor`) REFERENCES Library(iD),
    FOREIGN KEY (`descendant`) REFERENCES Library(iD)
);

表格数据:

ancestor    descendant
        01  01
        02  02
        02  03
        03  03
        02  04
        04  04
        02  05
        04  05
        05  05
        02  06
        04  06
        06  06
        07  07
        08  08
        09  09
        10  10

最佳答案

在 MySQL 中更容易进行多表删除:

DELETE paths_to_subtree FROM `TreePaths` AS paths_to_subtree
JOIN `TreePaths` AS subtree USING (`descendant`)
WHERE subtree.`ancestor`= 0x04;

关于mysql - Fun with MySQL - 如何使用 IN 编写删除语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8191326/

相关文章:

php - mysql_num_rows() 期望参数 1 为资源, bool 值

php - Jquery 仅在第一次硬刷新后重新加载 mysql 插入

mysql - 未显式设置的变量的值是多少?

sql - Informix:当您删除具有serial/serial8 主键的行时会发生什么?

sql - postgresql:选择所有关联记录都匹配条件的记录

mysql - 使用单个查询选择和删除

php - 直接在 MySQL 中将多行从一个表复制到另一个表?

MySql-数据透视表

mysql - mysql delete 语法与 select 有何不同?

performance - 在sqlite中如何在DELETE期间避免锁定?