2014-11-14 3 views
0

student_detail tableMySQL의 쿼리뿐만 아니라 데이터

내가

같은 쿼리를 발사 할 때 student_detail 테이블의

첫 번째 이미지, 두 번째는 payment_detail 테이블의 이미지가

payment_detail with all data payment_detail table![

입니다 모두와 함께 일부 특정 레코드와 작동
SELECT `student_detail`.`id`, 
    `student_detail`.`first_name`, 
    `student_detail`.`last_name`, 
    `student_detail`.`course`, 
    `payment_detail`.`id`, 
    `student_id`, 
    `inst_paid_date`, 
    `next_inst_date`, 
    `paid_installment`, 
    `next_installment_amount` 
FROM `student_detail`,`payment_detail` 
WHERE MONTH(`next_inst_date`)=MONTH(now()) 
    AND `inst_paid_date`<`next_inst_date` 
    AND `student_detail`.`id`=`student_id` 
    AND `student_id`='10' 
    AND `inst_paid_date` in(select max(`inst_paid_date`) from `payment_detail`) 

두 번째 테이블과 같이 레코드가있을 때 결과가 나오지 않지만 학생 ID 8 및 9를 삭제하면 결과가 다른 현명하지 않습니다. student_id = 10으로 where 조건을 perticularly 설정할 때 다른 레코드와 충돌합니다. 덕분에 고급

+0

원하는 결과와 질문을 데이터와 함께 http://sqlfiddle.com에서 바이올린을 만들고 업데이트하십시오 :이 payment_detail 테이블에 대한 외부 참조에 대한 별칭을 필요로한다. –

답변

1

이유는 을 전체 payment_detail 테이블의 최대 값으로 제한하기 때문입니다. 이 최대 값은 학생증을 위해이기 때문에가있는 경우 9, 학생증에 필터 (10)

에 한번이 충돌은 다음과 같이 귀하의 하위 쿼리에 동일한 필터를 추가합니다 :

WHERE 
    ...  
    AND `student_id`='10' 
    AND `inst_paid_date` in (select max(`inst_paid_date`) 
           from `payment_detail` 
           where `student_id` = '10') 

더 일반적인에게 솔루션은 하위 쿼리를 상관 된 하위 쿼리로 변환하는 것입니다.

... 
FROM `student_detail`,`payment_detail` as `PD` 
WHERE MONTH(`next_inst_date`)=MONTH(now()) 
    AND `inst_paid_date`<`next_inst_date` 
    AND `student_detail`.`id`=`student_id` 
    AND `PD`.`student_id`='10' 
    AND `inst_paid_date` in(select max(`inst_paid_date`) 
          from `payment_detail` 
          where `student_id` = `PD`.`student_id`)