我的数据库中有3个表:
创建新作业时,会为其分配一名员工,因此会在“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 :(得分: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
中没有记录的员工不会被排除在查询之外。