【问题标题】:DELETE multiple tables based on a query result根据查询结果删除多个表
【发布时间】:2021-10-15 21:44:22
【问题描述】:

我们的数据库没有实现ON DELETE CASCADE,所以我需要创建一个脚本或存储过程来删除多个表中的记录,因为查询中的 Ids 的结果:

我在存储过程中尝试过,但无法在变量中分配多行:

CREATE PROCEDURE `Delete_card`(IN _status INT)
BEGIN

    SET @IDs = SELECT ID FROM TABLE_ID WHERE Status=_status;
    
    DELETE FROM TABLE_A WHERE ID IN (@IDs);
    DELETE FROM TABLE_B WHERE ID IN (@IDs);
    DELETE FROM TABLE_C WHERE ID IN (@IDs);
    DELETE FROM TABLE_D WHERE ID IN (@IDs);
    DELETE FROM TABLE_E WHERE ID IN (@IDs);
END

【问题讨论】:

    标签: mysql join left-join sql-delete


    【解决方案1】:

    您可以使用多表 DELETE 语句来做到这一点:

    DELETE a, b, c
    FROM TABLE_ID t
    LEFT JOIN TABLE_A a ON a.id = t.id
    LEFT JOIN TABLE_B b ON b.id = t.id
    LEFT JOIN TABLE_C c ON c.id = t.id
    ..................................
    WHERE t.Status = ?;
    

    ? 更改为所需的状态值。

    查看简化的demo

    【讨论】:

    • 怎么样...... WHERE t.id IN (SELECT ID FROM TABLE_ID WHERE Status=_status AND ) 这可能吗?
    • @daniel.chan 你可以使用任何满足你想要的条件的子查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多