【问题标题】:Performing a deletion in 3 related tables在 3 个相关表中执行删除
【发布时间】:2021-06-15 14:50:27
【问题描述】:
Table1 Table2 Table3
Req_id Req_id env_id=1
env_id(FK) env_id=2

忽略其他字段...表 2 中的每个 req_id 都有一个 env_id,它从表 3 中获取这个 env_id。

如果表 2 中的 req_id 在表 3 中包含每个 env_id 的记录,我想从表 1 中删除该 req_id。

由于表 3 中的 env_id 在我将运行此脚本的每个环境中都会有所不同。因此,删除脚本需要动态编写。 感谢您的帮助。

   BEGIN
       FOR a
          IN (SELECT ENV_ID FROM Table3 t3)
            LOOP
              BEGIN
               DELETE FROM Table1 t1 WHERE t1.ID IN
               (SELECT t1.ID FROM Table1 t1
                INNER JOIN Table2 t2 ON t2.REQ_ID = t1.REQ_ID
                INNER JOIN Table3 t3 ON t3.ENV_ID = t2.ENV_ID
                AND t2.ENV_ID=a.ENV_ID)
              END;
           END LOOP;
      COMMIT;
    END;

【问题讨论】:

  • 您对此有何疑问?您使用的是哪个 RDBMS?
  • 这是否回答了您的问题? mysqltutorial.org/mysql-on-delete-cascade
  • 我使用 Oracle。
  • 签出 ON DELETE CASCADE 外键。
  • 不,我想从 table2 中删除记录。

标签: sql oracle


【解决方案1】:

如果表 2 中的 req_id 在表 3 中包含每个 env_id 的记录,我想从表 1 中删除该 req_id。

我相信您在这里描述的是relational division。在 sql 中,如何编写/读取此操作的查询并不那么明显,因此在 stackoverflow 和其他地方有很多问题/答案。

一些例子:

您的其余要求应该只是加入到正确的表以进行删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 2012-05-13
    • 1970-01-01
    相关资源
    最近更新 更多