2012-12-18 2 views
1

두 테이블이 서로 관련되어 있고 하나의 테이블에서만 레코드를 삭제하려고합니다. 테이블 구조는 다음과 같습니다.MySQL 삭제 단일 테이블에서만 레코드

더 이상 사용 조건이 적용되지 않는 사용자를 삭제하고 싶습니다.

billcreateddate < 2011-12-30 
billstatus=2 //pending 

active='0' 
unSubscribed<'2011-12-30' 

나는 쿼리를 작성했으나 예상 한 바가 아닙니다.

select * from userBilling ubill, Users user 
WHERE ubilll.userUnique=user.userUnique 
AND ubill.billCreatedDate<'2011-12-30' 
AND ubill.billstatus = '2' 
AND ((user.active = '0') AND (user.unsubscribed>'2011-01-01') 
AND user.unSubscribed<'2011-12-30')) 

위의 쿼리에 두 표의 결과가 모두 포함되어 있다고 생각합니다. 제발 제안!

감사합니다,

+0

위의 쿼리'DELETE's의 아무것도하지보십시오. –

+0

이 쿼리에는'billingid' 필드가 반환됩니까? 이 쿼리는 삭제할 레코드를 제공합니까? – jamis0n

+0

쿼리의 조건이 좋다고 가정하고 ('delete'를 호출하기 전에 값을 검색하기 위해'select'를 사용하고 있습니다), 테이블에 foreing 키가 있는지 확인 했습니까? – Cynical

답변

3
DELETE a 
FROM userBilling a 
     INNER JOIN users b 
      ON a.auserUnique = b.userUnique 
WHERE billcreateddate < 2011-12-30 OR 
     billstatus = 2 OR 
     active = 0 OR 
     unSubscribed < '2011-12-30' 

모든 조건이 사실ANDOR을 변경하려는 경우.

1

이렇게하면됩니다. 항상 조인을 명시 적으로 만들어야합니다. 그렇게하면 놀라지 않을 것입니다.

DELETE ubill 
FROM userBilling ubill 
    JOIN Users u 
    ON (ubill.userUnique=u.userUnique) 
WHERE ubill.billCreatedDate<'2011-12-30' 
    AND ubill.billstatus = '2' 
    AND ((u.active = '0') AND (u.unsubscribed>'2011-01-01') 
    AND u.unSubscribed<'2011-12-30')) 
+0

"필드 목록의 열 'ubill'이 모호합니다." –

+0

@MadanMadan : DELETE ubill. * ...'. 어떤 차이를 만들어서는 안되지만, 내가 볼 수있는 한, 오류가 발생해서는 안된다. – dnagirl

+0

이 쿼리는 SELECT에서 작동하지 않습니까? 그것은 DELETE 와도 작동하며이 쿼리에서 한도를 사용할 수 있습니까? –

0

은 단지`SELECT`s이

 DELETE ubill 
     FROM userBilling ubill 
    INNER JOIN Users 
    ON ubill.userUnique=user.userUnique 
     WHERE 
     ubill.billCreatedDate<'2011-12-30' 
     AND ubill.billstatus = '2' 
     AND user.active = '0' 
     AND user.unsubscribed>'2011-01-01' 
     AND user.unSubscribed<'2011-12-30'