删除不同表中其他记录引用的记录

我的人生

我有以下要求:

我需要根据给定的ID从一个表中删除记录,现在该表被另一个表引用,另一个表被另一个表引用,而最后一个表也被另一个表引用,所以我有一个像这样的链:

table_1 <- table_2 <- table_3 <- table_4

我对SQL并不了解,所以我的解决方案包括使用子查询来执行此操作。

我有这样的事情:

DELETE FROM table_4
     WHERE pk_of_table_3 IN 
               (SELECT id
                FROM table_3
                WHERE pk_of_table_2 IN 
                          (SELECT id FROM table 2 WHERE pk_of_table_1 = ?
                          )
               )

因此,这将从表4中清除引用表3中目标记录的记录。

对于table_3,我将执行以下操作:

DELETE FROM table_3
    WHERE pk_of_table_2 IN 
              (SELECT id FROM table_2 WHERE pk_of_table_1 = ?)

现在,我转到table_2:

DELETE FROM table_2 WHERE pk_of_table_1 = 5;

因此,最后它使我有可能从table_1清除必要的记录,因为它不受任何约束。

我想问一下这似乎是可行的解决方案,是否有更好的方法可以做到这一点?

a_horse_with_no_name

使用链接DELETE语句的公用表表达式来执行此操作:

with delete_t1 as (
  delete from table_1
  where pk = 42
  returning pk
), delete_t2 as (
  delete from table_2
  where pk_of_table_1 in (select pk from delete_t1)
  returning pk
), delete_t3 as (
  delete from table_3
  where pk_of_table_2 in (select pk from delete_t2)
  returning pk
)
delete from table_4
where pk_of_table_3 in (select pk from delete_t3);

如果您总是这样,考虑将外键约束定义为on delete cascade,则只需从table_1中删除即可,其余的将由Postgres负责。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如果记录是从其他表引用的,则禁止删除

来自分类Dev

使用 3 个表和联接删除其他记录中包含字符串的记录

来自分类Dev

根据表中的其他条件查询记录(选择记录)

来自分类Dev

查询以仅在其他记录的[金额]中未引用记录的情况下返回记录

来自分类Dev

在子表中查找引用主表中其他记录未引用的记录的项目

来自分类Dev

从表中选择记录,不在其他表中

来自分类Dev

从表中选择记录,不在其他表中

来自分类Dev

使用黄金记录创建交叉引用表并将其他记录关联到该记录

来自分类Dev

从记录中删除其他分隔符

来自分类Dev

Java根据其他表中的记录显示一个表中的记录

来自分类Dev

自引用表中的记录的有序删除

来自分类Dev

自引用表中记录的有序删除

来自分类Dev

Codeigniter SQL查询其他表中没有记录

来自分类Dev

如何使用内部联接从其他表中获取记录

来自分类Dev

表中按其他表列的顺序记录

来自分类Dev

对其他表中每条记录的每行 SQL 调用函数

来自分类Dev

将其他记录保存到其他表rails4中后,自动在表中创建记录

来自分类Dev

从表中提取记录跳过其他表的记录

来自分类Dev

拥有表的更好方法,其中的记录将其他记录引用为与父表相同的表

来自分类Dev

从不同的表中删除一条记录

来自分类Dev

删除其他表中没有引用的行

来自分类Dev

根据同一表中的其他记录更新记录

来自分类Dev

SQL:从其他表获取先前的记录

来自分类Dev

基于多个条件获取一个表中的记录但不提取其他表中的记录

来自分类Dev

如何删除与其他表具有外键关系的All()记录

来自分类Dev

在表中输入整个记录会自动更新其他表中的相应字段

来自分类Dev

使用其他表中的值的总和更新sql表中的记录

来自分类Dev

ORACLE SQL根据其他表中的值从1个表中检索记录

来自分类Dev

在其他表中不存在的表中查找记录

Related 相关文章

  1. 1

    如果记录是从其他表引用的,则禁止删除

  2. 2

    使用 3 个表和联接删除其他记录中包含字符串的记录

  3. 3

    根据表中的其他条件查询记录(选择记录)

  4. 4

    查询以仅在其他记录的[金额]中未引用记录的情况下返回记录

  5. 5

    在子表中查找引用主表中其他记录未引用的记录的项目

  6. 6

    从表中选择记录,不在其他表中

  7. 7

    从表中选择记录,不在其他表中

  8. 8

    使用黄金记录创建交叉引用表并将其他记录关联到该记录

  9. 9

    从记录中删除其他分隔符

  10. 10

    Java根据其他表中的记录显示一个表中的记录

  11. 11

    自引用表中的记录的有序删除

  12. 12

    自引用表中记录的有序删除

  13. 13

    Codeigniter SQL查询其他表中没有记录

  14. 14

    如何使用内部联接从其他表中获取记录

  15. 15

    表中按其他表列的顺序记录

  16. 16

    对其他表中每条记录的每行 SQL 调用函数

  17. 17

    将其他记录保存到其他表rails4中后,自动在表中创建记录

  18. 18

    从表中提取记录跳过其他表的记录

  19. 19

    拥有表的更好方法,其中的记录将其他记录引用为与父表相同的表

  20. 20

    从不同的表中删除一条记录

  21. 21

    删除其他表中没有引用的行

  22. 22

    根据同一表中的其他记录更新记录

  23. 23

    SQL:从其他表获取先前的记录

  24. 24

    基于多个条件获取一个表中的记录但不提取其他表中的记录

  25. 25

    如何删除与其他表具有外键关系的All()记录

  26. 26

    在表中输入整个记录会自动更新其他表中的相应字段

  27. 27

    使用其他表中的值的总和更新sql表中的记录

  28. 28

    ORACLE SQL根据其他表中的值从1个表中检索记录

  29. 29

    在其他表中不存在的表中查找记录

热门标签

归档