mysql查询只处理某些特定记录,而不是所有数据

mysql查询只处理某些特定记录,而不是所有数据,mysql,Mysql,第一个是student_详细信息表的图像,第二个是当我像这样启动查询时payment_详细信息表的图像 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_

第一个是student_详细信息表的图像,第二个是当我像这样启动查询时payment_详细信息表的图像

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`,
`学生详细资料`.`名字`,
`学生详细资料`.`姓`,
`学生详细信息“课程”,
`付款详细信息“.`id`,
`学生id`,
`安装付款日期`,
`下一个安装日期`,
`分期付款,
`下一期分期付款金额`
从'student\u detail','payment\u detail'
其中月份(`next_inst_date`)=月份(now())

和'inst_paid_date'原因是您将整个
payment_detail
表中的
inst_paid_date
限制为最大值。由于此最大值存在时是针对学生id 9的,因此与学生id 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`)
。。。
从'student\u detail','payment\u detail'改为'PD`
其中月份(`next_inst_date`)=月份(now())
和'inst_paid_date'请在数据中创建一个小提琴,并用期望的结果更新问题。