2014-05-19 1 views
-4
DELETE f.* FROM FILE f, topic t, course c WHERE f.topic_id = t.topic_id AND t.course_id = 28; 

DELETE t.* FROM topic t WHERE t.course_id = 28; 

DELETE c.* FROM course c WHERE c.course_id = 28; 

EDIT : op는 세 테이블 모두에서 행을 삭제하려고한다는 것을 알고 싶어합니다 (질문에 명확한 설명에 표시된대로). 그들은 ID를 공유합니다. 기본적으로 3 개의 테이블을 가로 지르는 계단식 삭제입니다.관계를 참조하여 mysql의 세 테이블에서 행을 삭제하는 방법

+3

문제를 설명해주십시오. –

+3

그럼, 여기서 뭐가 문제입니까? 그것을 얻지 않았다. – Rahul

+0

안녕하세요. SO! 표 사이에 제약 조건이 설정되어있는 경우 계단식 삭제를 수행 할 수 있어야합니다. 이것 좀 봐. http://stackoverflow.com/questions/2914936/mysql-foreign-key-constraints-cascade-delete – markg

답변

1
DELETE f.*, t.*, c.* FROM file f 
JOIN topic t ON t.topic_id = f.topic_id 
JOIN course c ON c.course_id = f.topic_id 
WHERE f.topic_id = 28 

이것은 MySQL의 documentation다중 테이블 구문에 해당합니다. 그것은 :

다중 테이블 구문의 경우 DELETE는 각 tbl_name에서 조건을 만족하는 행을 삭제합니다. 이 작업을 수행 할 수

다른 방법은 (내가 부모/자식 관계가 테이블에 무엇인지 확실하지 않다) 부모 테이블에 외래 키와 컬럼을 선언하고에 ON DELETE CASCADE 옵션을 사용하는 것입니다 외래 키. 그런 다음 부모 테이블에서 행을 삭제하면 관련된 행이 하위 테이블에서 자동으로 삭제됩니다. 외부 키 적용에서는 MyISAM이 아닌 InnoDB을 데이터베이스 엔진으로 사용해야합니다.

+0

이것은 작동하지 않습니다 – user3653924

+0

나는 bt woking .. 같은 것을하고 싶습니다. . DELETE f. *, t. *, c. * 코스 C, 주제 t, 파일 f에서 c.course_id = 26 AND (t.course_id = c.course_id AND (f.topic_id = t.topic_id)) – user3653924

+0

그게 효과가 있다고 생각합니다. 문제를 보여주는 sqlfiddle을 만드십시오. – Barmar

관련 문제