删除引用其他2个表的查询

时间:2013-07-22 09:06:48

标签: mysql foreign-keys primary-key sql-delete

我有3个表tab1,tab2和tab3。 其中tab1的主键是tab2的外键 和 选项卡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

OR ELSE

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

有人可以提出正确的解决方法吗?

2 个答案:

答案 0 :(得分: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
    
  3. 但是,如果将外键配置为CASCADE删除,那么只要父记录被删除,MySQL就会自动删除子行(也许这就是你想要的?)。

答案 1 :(得分:0)

试试这个

DELETE FROM tab3 
    JOIN tab2 ON tab3.tab2_id = tab2.id
    JOIN tab1 ON tab2.tab1_id = tab1.id