2012-04-13 165 views
1

我有我的数据库3个表:MySQL - 如何为每个GROUP BY集返回多个结果?

  1. employee_log
  2. job_log
  3. crew_log

当创建一个新的工作,员工被分配给它,这样的条目在“crew_log”表中创建。

我想要做的是将每个员工的type = 2属性(意味着他们是一个主管)(从employee_log)中获取,然后将crew_log加入到查询中。

每个员工可以在“crew_log”中拥有多个活动作业,因此目标是将该员工的所有活动作业返回到数组中。

我的查询到目前为止是这样的:

SELECT el.id, cl.job_id 
FROM employee_log AS el 
JOIN crew_log AS cl 
    ON el.id=cl.employee_id 
    AND cl.start_date >= CURDATE() 
WHERE el.type=2 
GROUP BY cl.employee_id 

这当然是不正确的,但也许它会帮助我的可视化问题。当然

我可以这样做的另一种方式...但我试图做的一切是针对性能一个SQL查询和学习新的东西有关SQL :)

另一种方法是,我用两个while循环..第一个循环将获得每个员工type = 2,然后在该循​​环中,我将执行另一个SQL查询以获取该员工的所有活动作业。

必须有更好的方法来做到这一点?

+0

请将三个表格的结构添加到您的问题中。 – nnichols 2012-04-13 00:39:57

+0

我自己没有得到要求。可能会添加一些来自表格的示例数据(我猜'job_log'不需要),并且以表格格式显示预期结果会有所帮助。 – 2012-04-13 01:33:44

回答

1

您的查询看起来正确,因为您不需要GROUP BY,因为您没有任何聚合函数(SUM(), COUNT(), AVG())将其替换为ORDER BY以对员工ID进行排序。

SELECT el.id, cl.job_id 
FROM 
    employee_log AS el 
    LEFT JOIN crew_log AS cl 
    ON el.id=cl.employee_id 
WHERE 
    el.type=2 
    AND cl.start_date >= CURDATE() 
ORDER BY el.id 

我也换成你JOINLEFT JOIN让谁在crew_log没有记录的员工没有从查询中排除。