2

我的数据库中有 3 个表:

  1. 员工日志

  2. 工作日志

  3. 船员日志

创建新工作时,会为其分配一名员工,因此会在“crew_log”表中创建一个条目。

我想要做的是获取每个具有 type=2 属性(意味着他们是主管)(来自employee_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 查询来获取该员工的所有活动作业。

必须有更好的方法吗?

4

1 回答 1

1

您的查询看起来是正确的,只是您不需要 ,GROUP BY因为您没有任何聚合函数 ( SUM(), COUNT(), AVG()) 将其替换为 anORDER 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用 a替换了你的,LEFT JOIN这样没有记录的员工就不会crew_log被排除在查询之外。

于 2012-04-13T00:44:38.230 回答