2012-10-06 5 views
3

다음 쿼리는 I 삭제할 레코드 목록 ...JOIN과 ID없이 어떻게 삭제합니까?

SELECT * 
FROM `orderitems` as oi 
LEFT JOIN `orders` as o 
    ON (o.`orderid` = oi.`orderid`) 
WHERE o.`date` = '2012-10-05' 
    AND o.`status` = 'init'; 

불행하게도, 표가 id 필드없이 설계된를 얻을 수 있습니다.
조인을 사용하여 다른 삭제를 살펴 보았지만 모두 id 필드를 사용합니다.
그리고이 작동하지 않습니다

DELETE 
FROM `orderitems` as oi 
LEFT JOIN `orders` as o 
    ON (o.`orderid` = oi.`orderid`) 
WHERE o.`date` = '2012-10-05' 
    AND o.`status` = 'init'; 

어떻게 DELETE 하나의 MySQL의 쿼리 위의 설정합니까?

답변

4

이 시도 (없음 PHP 없음),

DELETE oi -- add the alias here 
FROM `orderitems` as oi 
LEFT JOIN `orders` as o 
    ON (o.`orderid` = oi.`orderid`) 
WHERE o.`date` = '2012-10-05' 
    AND o.`status` = 'init'; 

또는하여

하위 쿼리
DELETE FROM `orderitems` 
WHERE `orderid` IN 
(
    SELECT o.`orderid` 
    FROM `orders` as o 
    WHERE o.`date` = '2012-10-05' AND o.`status` = 'init' 
) 
+0

은 최고 사용! 매일 무언가를 배우십시오 :) – neokio

+0

그것이 효과가 있었습니까? : D –

+0

네, 첫 번째 ... 서브 쿼리를 생각하지 않으면 바보 같아요, 서브 쿼리가'orderitems'을 필요로하지 않기 때문에 더욱 단순화 될 수 있습니다. – neokio

관련 문제