2012-02-14 1 views
1
DELETE FROM table_a WHERE id IN(
    SELECT table_a.id AS id FROM table_a, table_b 
    WHERE table_a.object_id = 1 AND table_a.code = 'code' 
     AND table_a.code = table_b.code 
     AND table_b.id = table_a.b_id 
     AND table_b.table = 'testTable') 

MySQL이 실행되기를 원하는 (다소 단순화 된) 쿼리입니다. stackoverflow의 다른 페이지에서 지원되지 않았고 JOINS를 사용하여 해결할 수 있다고 읽었습니다. 어떻게 이것을 JOINS를 사용하는 쿼리로 '옮겨 놓을 수 있습니까?' 하나 이상의 테이블로 DELETE 쿼리를 작성한 적이 없기 때문에 그렇게하기가 어렵습니다.MySQL | FROM 절의 업데이트 대상 테이블 'a'를 지정할 수 없습니다.

+1

중복 가능성 [DELETING 배로 사용자 (MySQL의) (http://stackoverflow.com/questions/2669165/deleting-doubled-users-mysql) –

답변

5

당신은 테이블에서 삭제하고 하위 쿼리 — 단지 제한에 동일한 테이블을 참조 할 수 없습니다 MySQL의. 다음과 같은 뭔가 작동합니다 :

DELETE FROM table_a 
USING table_a 
INNER JOIN table_b 
    ON table_a.code = table_b.code 
    AND table_b.id = table_a.b_id 
    AND table_b.table = 'testTable' 
WHERE table_a.object_id = 1 
    AND table_a.code = 'code' 

중요한 부분은 USING이다. 두 테이블을 조인하면 두 레코드를 모두 삭제합니다. USING은 MySQL에이 테이블을 처리하도록 지시하지만, FROM 절의 테이블에서만 삭제합니다.

http://dev.mysql.com/doc/refman/5.0/en/delete.html

4

이것은 일반적인 MySQL의 문제이며, 선택 및 업데이트 사이에 임시 테이블을 사용/삭제 :

DELETE FROM table_a WHERE id IN 
    (select id from 
     (SELECT table_a.id AS id FROM table_a, table_b 
     WHERE table_a.object_id = 1 
     AND table_a.code = 'code' 
     AND table_a.code = table_b.code 
     AND table_b.id = table_a.b_id 
     AND table_b.table = 'testTable') 
    ) tempTable 
2

는 mutliple 테이블에서 삭제하기위한 두 (약간 다른) 구문이 있습니다. 여기 USING없이 하나 :

DELETE a 
FROM 
     table_a AS a 
    INNER JOIN 
     table_b AS b 
    ON b.code = a.code 
    AND b.id = a.b_id 
WHERE 
     a.object_id = 1 
    AND a.code = 'code' 
    AND b.`table` = 'testTable' --- Do you actually have a column named "table"? 
0

내 방법은 ... 당신이 사용할 수 있다면!

DELETE FROM table_a WHERE id IN(SELECT id FROM(SELECT id FROM table_a WHERE userid=99 GROUP BY mobile HAVING COUNT(mobile) > 1) as t2)