我的数据库中有一个表作业。和它的两个子表。一个job_status_detail和job_assigned。
一个作业可能具有多个状态,例如在job_status_detail中创建,启动,完成一个job_id。 可以在job_assigned中将一个作业分配给具有job_id的多个用户。
现在我想要在job_status_detail中输入最后状态的所有作业记录。
我使用以下查询
SELECT * FROM `jobs` as `t`
LEFT OUTER JOIN `job_assigned` as `jobDetail` ON (`jobDetail`.`job_id`=`t`.`id`)
LEFT OUTER JOIN `job_status_detail` as `job` ON (`job`.`job_id`=`t`.`id`) WHERE jobDetail.assign_to=1
Order by job.id
但它给了我全部数据。如果一个作业在job_status_detail中有三个条目,它会给我3个条目。最后一个插入条目。
结果应该是一个作业具有一个作业状态(最后插入)。
答案 0 :(得分:0)
这是我的解决方案。
SELECT * FROM `jobs` as `t`
LEFT OUTER JOIN `job_assigned` `jobDetail` ON (`jobDetail`.`job_id`=`t`.`id`)
INNER JOIN (select max(id) id from `job_assigned` group by `job_id`) j ON jobDetail.id=j.id
LEFT OUTER JOIN `job_status_detail` `job` ON (`job`.`job_id`=`t`.`id`)
INNER JOIN (select max(id) id from job_status_detail group by job_id) jsd ON job.id=jsd.id
WHERE jobDetail.assign_to=1
答案 1 :(得分:-1)
您必须逐个标记
SELECT * FROM `jobs` as `t`
LEFT OUTER JOIN `job_assigned` as `jobDetail` ON (`jobDetail`.`job_id`=`t`.`id`)
LEFT OUTER JOIN `job_status_detail` as `job` ON (`job`.`job_id`=`t`.`id`)
GROUP BY job.job_status Order by job.id