2011-11-14 10 views
0

接続されている複数のテーブルから行を削除しようとしています。しかし、ストアドプロシージャを実行すると、0行が影響を受けます。あなたが見ることができるように、この機能はかなり広範ですが、接続されている多くのテーブルから行を削除するという考え方です。複数のテーブルから結合を含む行を削除する

どうすればこの作品を作成できますか?

CREATE DEFINER=`root`@`localhost` PROCEDURE `remove_tables_select1`(
    IN in_TableA_ID INT 
    ) 
BEGIN 
    DELETE FROM TableB, TableC, TableD, TableE, TableA, TableF, TableG, TableH, TableI 
    using TableB 
    inner join TableC on (TableC.ID = TableB.TableC_ID) 
    inner join TableH on (TableH.TableB_ID = TableB.ID) 
    inner join TableD on (TableD.TableB_ID = TableB.ID) 
    inner join TableE on (TableE.TableB_ID = TableB.ID) 
    inner join TableA on (TableA.ID = in_TableA_ID) 
    inner join TableF on (TableF.TableA_ID = TableA.ID) 
    inner join TableG on (TableG.TableA_ID = TableA.ID) 
    inner join TableI on (TableI.TableH_ID = TableH.ID); 
END 

小さい例:あなたの小さい例えば

CREATE DEFINER=`root`@`localhost` PROCEDURE `remove_tables_select1`(
    IN in_TableA_ID INT 
    ) 
BEGIN 
    DELETE FROM TableA, TableB, TableC, TableD 
    using TableA 
    inner join TableB on (TableB.ID = TableA.TableB_ID) 
    inner join TableC on (TableC.TableB_ID = TableC.ID) 
    inner join TableD on (TableC.TableD_ID = TableD.ID) 
    WHERE TableA.ID = in_TableA_ID; 
END 
+0

対応するSELECTクエリがレコードを返すことを確認します。 –

答えて

0

、次のクエリを使用しよう - INNER JOINをすることを

DELETE a, b, c, d FROM TableA a 
JOIN TableB b 
    ON b.ID = a.TableB_ID 
JOIN TableC c 
    ON c.TableB_ID = c.ID 
JOIN TableD d 
    ON c.TableD_ID = d.ID 
WHERE 
    a.ID = in_TableA_ID; 

注意、使用されています。対応するSELECTクエリがレコードを返すことを確認します。

0

これは若干のオーバーヘッドを招くかもしれませんが、FOREING KEYSの場合はCASCADEの削除を使用すると思います。

関連する問題