如何根据一个表中的特定值从3个表中删除行[重复]

Posted

技术标签:

【中文标题】如何根据一个表中的特定值从3个表中删除行[重复]【英文标题】:How to delete rows from 3 tables based on a specific value in one table [duplicate] 【发布时间】:2014-07-31 19:30:08 【问题描述】:

Helo 伙计们,

我有 3 张桌子。 A,B,C.

我在表 A 中有行,其列 'date' 的值为 '2000-1-1'。

我喜欢从基于where A.date = '2000-1-1'3 个表中删除行。

考虑join on A.ID = B.ID.. 或表之间的某种其他类型的连接。

【问题讨论】:

级联删除怎么样? 您不能同时从三个表中删除。您需要三个单独的语句。 一个 DML 语句(插入、删除等)只能影响一个表。 问题是关于“怎么做”,他们不需要一个陈述。这可以在一个事务中使用 3 个语句来完成。 如果您想回答您的问题,我们将需要更多信息。您是否在寻找多个语句、一个存储过程、一组触发器? 【参考方案1】:

您不能针对 3 个表发出单个删除语句,但您可以在一个事务中针对 3 个不同的表包装 3 个删除语句。

BEGIN TRANSACTION

    DELETE FROM TABLE_A
    WHERE EXISTS (SELECT 1
                  FROM Table_X X
                  WHERE TABLE_A.ID = X.ID)

    DELETE FROM TABLE_B
    WHERE EXISTS (SELECT 1
                  FROM Table_X X
                  WHERE TABLE_B.ID = X.ID)

    DELETE FROM TABLE_C
    WHERE EXISTS (SELECT 1
                  FROM Table_X X
                  WHERE TABLE_C.ID = X.ID)

COMMIT TRANSACTION;

【讨论】:

什么是表 X?第四张桌子?

以上是关于如何根据一个表中的特定值从3个表中删除行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个表中的值删除行

如何从1个表中选择许多行并将其插入另一个表中特定行的特定JSONB字段中?但是在单个原始SQL查询中

从表中的多个重复项中删除特定记录

根据先前的值从表中删除行

如何使用组合框根据另一个组合框的值从不同的表中选择数据

如何删除表中的重复行[重复]