2011-11-14 3 views
0

J'essaie de supprimer des lignes de plusieurs tables connectées. Mais quand j'exécute la procédure stockée 0 lignes sont affectées. Comme vous pouvez le voir, la fonction est assez étendue mais l'idée est de supprimer les lignes de nombreuses tables connectées.Supprimer des lignes de plusieurs tables avec une jointure

Comment est-ce que je peux faire ce travail?

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 

Un petit exemple:

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

Vérifiez que la requête SELECT correspondante renvoie des enregistrements. –

Répondre

0

Pour votre exemple plus petit, essayez d'utiliser la requête suivante -

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; 

Notez que INNER JOIN est utilisé; vérifiez que la requête SELECT correspondante renvoie les enregistrements.

0

Cela peut entraîner une surcharge, mais pensez à utiliser la suppression CASCADE pour FOREING KEYS.

Questions connexes