2014-03-27 4 views
0

나는 call_charges라는 테이블이 있는데, 그 안에 다음과 같은 데이터가있다. enter image description here자체 조인 MySQL의 복잡한 쿼리

결제 재 시도도 미 지불 인 모든 미납 지불을 받아야합니다. 널되지 transaction_bidis_paid 0, id 6 및 10 그러나 id 6 레코드를 반환 보유

즉 행 갖는다 (retry_id 6 is_paid 1 id 12) 유료 재시이 있으므로 id 6 행 그 결과에 있어서는 안된다.

나는 함께 시도 :

SELECT `call_charges`.* FROM `call_charges` LEFT JOIN `call_charges` AS 
`retries_call_charges` ON `retries_call_charges`.`retry_id` = `call_charges`.`id` 
WHERE `call_charges`.`is_paid` = 0 AND (`call_charges`.`transaction_bid` IS NOT NULL 
AND `call_charges`.`retry_id` IS NULL) 

그러나 사전에 id 6, 10

덕분에 두 행을 반환합니다. 여기

+0

가'call_charges'을 선택합니다. *'call_charges' 왼쪽에서 ON' 'retries_call_charges' AS call_charges' 가입하세요'retries_call_charges'.'retry_id' ='이 쿼리를 실행하고 당신이 무엇을 얻을 참조 call_charges'.'id' 후 작성 귀하의 WHO 데이터를 기반으로. –

+0

이봐, 10 번째 것을 원한다. – jmail

+0

예, 10 번째. – shweta

답변

2

당신은 이동 :

SELECT c1.id 
FROM call_charges c1 
LEFT JOIN call_charges c2 
ON c1.id = c2.retry_id AND c2.is_paid = 1 
WHERE c1.transaction_bid IS NOT NULL 
AND c1.is_paid = 0 
AND c2.id IS NULL 
AND c1.retry_id IS NULL 

작업 바이올린하십시오 LEFT JOIN가 사용 되었기 때문에http://sqlfiddle.com/#!2/29549/13

c2.id가 null이 될 수 있습니다. c1.idc2.retry_id과 일치하지 않을 경우 c2.id은 NULL입니다.

+0

'c2.id IS NUL'의 의미는 무엇인지 설명해주십시오. 'id'는 기본 키이며 어떤 레코드에 대해서도 null이 아닙니다. – shweta

+0

12 번째 행에 is_paid가 0이면 6 번째와 10 번째 행을 반환해야하지만 10 번째 행만 반환해야합니다. – shweta

+0

@shweta는 위의 대답을 수정하고 업데이트했습니다 (바이올린 포함). 그건 그렇고 마지막 AND 조건은 당신의 상태에 필요할 수도 있고 아닐 수도 있습니다. –