2014-02-24 2 views
0

테이블 :이 쿼리에서 다른 열이없는 열을 삭제할 수없는 이유는 무엇입니까?

projects - id, id_users 
categories - id, id_project, id_users 
marks - id, id_project, id_category, id_users 

나는이 SQL이 있습니다

DELETE projects, categories, marks FROM projects 
LEFT JOIN categories ON projects.id=categories.id_project AND projects.id_users=categories.id_users 
LEFT JOIN marks ON categories.id=marks.id_category AND categories.id_project=marks.id_project AND categories.id_users=marks.id_users 
WHERE projects.id=:id AND categories.id_users=:id_users 
프로젝트 컬럼에 따라됩니다 whitch 카테고리 열, 다음 프로젝트가 삭제 될 수있는 경우

..하지만, 카테고리 열, whitch 경우 프로젝트 열에 따라 다르지만 존재하지 않으며 삭제할 수 없습니다. 그래서 내가 묻는거야, 왜? 내가 뭘 잘못 했니?

+0

하고 거기 tables..if에 참조 무결성을 어떻게 설정 on delete cascade update ... –

답변

1

여러 테이블 DELETE 문은 두 가지 형식으로 작성할 수 있습니다. 다음 예 이드가 매치 값 테이블 T1로부터 행을 삭제하는 쿼리를 들어, 하나의 신택스를 보여주는 테이블 T2에 해당 :

DELETE t1 FROM t1, t2 WHERE t1.id = t2.id; 

번째 구문은 약간 다르다 :

DELETE FROM t1 USING t1, t2 WHERE t1.id = t2.id; 

이 두 테이블에서 일치하는 레코드를 삭제하려면 문은 다음과 같습니다

DELETE t1, t2 FROM t1, t2 WHERE t1.id = t2.id; 
DELETE FROM t1, t2 USING t1, t2 WHERE t1.id = t2.id; 

순서에와 LIMIT 절을 정상적으로 지원 절 UPDATE 및 DELETE에 의해 ted가 허용되지 않는 이유는 이들 명령문이 다중 테이블 작업에 사용될 때 입니다.

+0

고마워,하지만이게 내가 알고 있고 2 테이블에서 삭제하는 데 아무 문제가 없지만 3 개의 테이블이 있고 카테고리가 없다면 "프로젝트"를 삭제할 수 없다 .. –

0

'프로젝트'테이블은 '카테고리'와 '마크'테이블의 마스터입니다. 그리고 'categories'는 'marks'테이블의 마스터입니다. innodb 엔진을 사용하고 있다면 외래 키에서 캐스케이드 등록 정보를 삭제하십시오.

이렇게하면 프로젝트라는 마스터 테이블에서 데이터를 삭제하기 만하면 데이터가 모든 하위 테이블에서 자동으로 삭제됩니다. 이 삭제 질의는 밝을 것입니다.

하지만 myisam 엔진을 사용하는 경우 아이디어를 얻을 수 있습니다.

+0

예, 그렇습니다. MyISAM을 사용하고 있는데, 처음 시도가 쓸데없이 복잡하다는 것을 깨달았습니다. ated .. 어떻게 작동하는지 생각하기 시작한 다음이 두 번째 쿼리를 만들었습니다. 정확히 내가 찾고있는 것이었다 .. –

0

영업 썼다 :

편집 : 나는 그것을 가지고 ..

DELETE projects, categories, marks FROM projects 
LEFT JOIN categories ON categories.id_project=projects.id 
LEFT JOIN marks ON marks.id_project=projects.id 
WHERE projects.id=:id AND projects.id_users=:id_users 
는 데이터 삭제하려는 테이블에서
+0

([편집에 응답하고 커뮤니티 wiki로 변환] (http : // meta. stackoverflow.com/questions/267434/what-is-the-appropriate-action-when-the-answer-to-a-question-is-added-to-theque).) –

관련 문제