0

我有 3 个表 tab1、tab2 和 tab3。其中tab1的主键是tab2的外键,tab 2的主键是tab3的外键

TAB1  |  TAB2     |  TAB3
-----------------------------
ID    |  ID       |  ID
      |  TAB1_ID  |  TAB2_ID

我想通过以下方式删除选项卡 3 中的一行:

DELETE FROM TAB3 WHERE TAB2_ID=TAB2.ID AND TAB2.TAB1_ID=TAB1.ID

要不然

DELETE FROM TAB3 WHERE TAB2_ID=TAB2.ID AND TAB2.TAB1_ID=3

谁能建议一个正确的方法来解决这个问题?

4

2 回答 2

1

您可以使用多表DELETE语法:

  1. DELETE FROM TAB3 WHERE TAB2_ID=TAB2.ID AND TAB2.TAB1_ID=TAB1.ID

    DELETE TAB3
    FROM   TAB3
      JOIN TAB2 ON TAB2.ID = TAB3.TAB2_ID
      JOIN TAB1 ON TAB1.ID = TAB2.TAB1_ID
    
  2. DELETE FROM TAB3 WHERE TAB2_ID=TAB2.ID AND TAB2.TAB1_ID=3

    DELETE TAB3
    FROM   TAB3
      JOIN TAB2 ON TAB2.ID = TAB3.TAB2_ID
    WHERE  TAB2.TAB1_ID = 3
    

但是,如果您将外键配置为CASCADE删除,那么每当删除父记录时,MySQL 将自动删除子行(也许这是您想要的?)。

于 2013-07-22T09:16:45.633 回答
0

尝试这个

DELETE FROM tab3 
    JOIN tab2 ON tab3.tab2_id = tab2.id
    JOIN tab1 ON tab2.tab1_id = tab1.id 
于 2013-07-22T09:17:30.593 回答