2016-09-16 2 views
3

나는이MySQL의 : 절

SELECT a.album_id parent, a2.album_id child 
FROM album a 
LEFT JOIN album a2 ON a2.parent_album_id = a.album_id 
WHERE a.album_id = 76 

는 기본적으로, 부모와 자녀 값과 같이 반환이 쿼리가 WHERE에서 삭제하는 방법 :

parent  child 
-------------------- 
76   64 
76   106 

내가 그 값을 사용하려는에게의 부모와 아이의 전체 (76, 64, 106), 그래서

DELETE a, ai 
FROM album a 
LEFT JOIN album_image ai ON ai.album_id = a.album_id 
WHERE a.album_id IN (76,64,106) 

상기 쿼리를 실행하는 것처럼 다른 테이블에서 삭제 완벽하게 작동합니다! 하지만 쿼리가 동적이어야합니다. 내가 더 성공이 시도했습니다 :

DELETE a, ai 
FROM album a 
LEFT JOIN album_image ai ON ai.album_id = a.album_id 
WHERE a.album_id IN (
    SELECT a.album_id parent, a2.album_id child 
    FROM album a 
    LEFT JOIN album a2 ON a2.parent_album_id = a.album_id 
    WHERE a.album_id = 76 
) 

가 작동하지 않습니다 왜 그것을 얻을, where 절에 서브 쿼리가이 개 값을 반환하기 때문에. 그래서 나는 성공없이 CONCAT_GROUP과 CONCAT_WS를 시도했다.

내 솔루션은 무엇입니까? 감사합니다.

+1

그래서 왜 subselect에서 둘 이상의 값을 선택합니까? –

+0

그것은 내가 지금까지 한 일을 보여주는 것입니다. 나는 1 값 (부모와 자식)을 반환하는 방법도 없다. – Marco

답변

3

SELECT가 하위 쿼리에도 동일한 쿼리의 동일한 테이블에서 SELECT 및 DELETE를 시도하면 MySQL은 일반적으로 불만입니다.

그러나 DELETE 쿼리에서 더 많은 조인을 수행 할 수 있습니다.

DELETE a, ai 
FROM album a 
LEFT JOIN album_image ai ON ai.album_id = a.album_id 
LEFT JOIN album p ON a.parent_album_id = p.album_id 
WHERE a.album_id = 76 OR p.album_id = 76 
+0

와우! 그 것처럼! 감사 – Marco

1

시도해 보셨습니까?

DELETE a, ai 
FROM album a 
LEFT JOIN album_image ai ON ai.album_id = a.album_id 
WHERE a.album_id IN (
    SELECT a.album_id parent 
    FROM album a 
    LEFT JOIN album a2 ON a2.parent_album_id = a.album_id 
    WHERE a.album_id = 76 
) 
or a.album_id IN (
    SELECT a2.album_id child 
    FROM album a 
    LEFT JOIN album a2 ON a2.parent_album_id = a.album_id 
    WHERE a.album_id = 76 
) 
+0

이 해결책도 다시 작동한다. – Marco