2014-12-21 5 views
1

하나의 쿼리로 둘 이상의 테이블에서 데이터를 삭제하는 방법을 알려주십시오. 나는이 테이블 구조를 가지고있다 - 제품에 매핑 파일을 여기에 있습니다 -하나의 쿼리에서 더 많은 테이블의 데이터 삭제

products 
texts 
files 

products_files 여기에 텍스트 파일을 매핑됩니다 - - PRODUCT_ID는 texts_files을 FILE_ID text_id을

을 FILE_ID 그리고 나는이 작업을 수행해야합니다 ID가 50 인 파일을 삭제하면 files_id = 50 인 products_files 및 texts_files에서 모든 행을 삭제해야합니다.

알고 계십니까?

내가 가입 왼쪽으로 사용하려하지만, 어떤 결과없이 ...

$query = 'DELETE products_files, texts_files FROM products_files 
        LEFT JOIN texts_files ON texts_files.file_id = products_files.file_id 
        WHERE products_files.file_id = '.$id.' OR texts_files.file_id = '.$id.''; 
+0

어쩌면이 도움이 작동하지 않습니다 당신 : http://stackoverflow.com/questions/를이 참조 1233451/2 테이블에서 하나의 쿼리를 삭제 –

+0

가능한 중복 [MySQL에서 여러 테이블을 삭제하는 방법?] (http://stackoverflow.com/questions/3331992/how-to-delete-from) -multiple-tables-in-mysql) – maja

+0

DELETE의 LEFT JOIN은 이상한 것입니다. – Strawberry

답변

0

당신은 ON DELETE CASCADE 기능을해야 할 수도 있습니다. 이 놀라운 결과가있을 수 있습니다 그러나,주의해서 사용

http://www.mysqltutorial.org/mysql-on-delete-cascade/

을 당신이 당신의 create table - 쿼리에 ON DELETE CASCADE를 추가하는 경우, 당신은 그것에서 항목을 삭제할 수 있습니다. 외래 키 제약 조건이있는 경우, mysql은 자동으로 연결을 추적하고 다른 테이블의 항목도 삭제합니다.

(권장) 안전한 쪽을 유지하려면 여러 개의 delete 문을 사용해야합니다.

+0

삭제 캐스케이드가 외래 키와 연결되어 있지 않습니까? 아직 사용하지 않습니다. –

+0

@ JanKožušník 예입니다. 외래 키가 없으면 여러 개의 delete 문을 작성해야합니다. 하나의 삭제만으로 여러 문장에서 항목을 삭제할 수는 없습니다. – maja

+0

고맙습니다. 하지만 테이블 조인은 ...? 방법이 없다? –

0

이 시도 :

DELETE f1,f2 
FROM products_files f1 
INNER JOIN texts_files f2 ON f1.file_id = f2.file_id 
WHERE f1.file_id = '.$id.'; 

또는

사용 MySQL의 외래 키 제약
MySQL foreign key constraints, cascade delete

+0

해결책이 작동하지 않습니다 :/ –

0

당신이에서 삭제 된 테이블을 지정할 수있는 테이블과 함께 *를 앞에 붙여 이름 : DELETE 테이블. * FROM table1 JOIN 테이블 2 JOIN ... WHERE ... T WHERE 절은 h 제할 행을 지정합니다.

+0

products_files 및 texts_files에서 삭제하려면 내 검색어가 다음과 같이 표시되어야합니다 : 'DELETE products_files. *, texts_files FROM. * ' –

+0

. 방금 체크했는데 tablename 전용 구문은 위의 Para의 대답에서 권장 한 것과 동일한 작업을 수행합니다. – Andras

0

기본적으로 쿼리가 (가입을 왼쪽 제외) 나에게 좋은 것 -이 ...

DELETE pf 
    , tf 
    FROM products_files pf 
    JOIN texts_files tf 
    ON tf.file_id = pf.file_id 
WHERE pf.file_id = $id; 
관련 문제