2011-11-14 3 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

옆 쿼리 사용하려고 -

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; 

주, INNER를 사용하는 가입 있음을; 해당 SELECT 쿼리가 레코드를 반환하는지 확인하십시오.

0

이것은 약간의 오버 헤드를 유발할 수 있지만, FOREING KEYS에 대해 CASCADE 삭제를 생각해보십시오.

관련 문제