如何使用Join将最后插入的单个列与子表中的多个值进行匹配

时间:2015-01-23 10:51:13

标签: php mysql

我的数据库中有一个表作业。和它的两个子表。一个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个条目。最后一个插入条目。

结果应该是一个作业具有一个作业状态(最后插入)。

2 个答案:

答案 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