MySQL - 如何为每个GROUP BY集返回多个结果?

时间:2012-04-13 00:33:48

标签: mysql sql database mysqli

我的数据库中有3个表:

  1. employee_log
  2. job_log
  3. crew_log
  4. 创建新作业时,会为其分配一名员工,因此会在“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查询来获取该雇员的所有活动作业。

    必须有更好的方法吗?

1 个答案:

答案 0 :(得分: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

我还将JOIN替换为LEFT JOIN,以便crew_log中没有记录的员工不会被排除在查询之外。