我有2张桌子,员工和假期。
我正在尝试选择一份员工名单,他们允许的假期以及他们在查看今年的假期后剩下的假期。
表格如下所示(仅显示重要行)
employees
id,
name,
allowed_holiday
holiday
id,
employee,
num_days,
date_to
我有当前查询可以很好地找到这些值,但是我想添加一个WHERE子句来仅对员工计算假期,如果date_to> xxxx-09-01 AND< XXXX-09-01。
SELECT
e.id,
e.name,
e.allowed_holiday,
(e.allowed_holiday - SUM(h.num_days)) AS remaining
FROM
employees AS e
LEFT JOIN
holiday AS h
ON
h.employee = e.id
GROUP BY
e.name
ORDER BY
e.name ASC
我不知道在哪里为此添加WHERE子句,但没有从没有列出假期的数据中删除员工。
答案 0 :(得分:5)
在进行LEFT连接时,过滤条件必须在ON语句中。所以在你的情况下,它看起来像这样:
SELECT
e.id,
e.name,
e.allowed_holiday,
(e.allowed_holiday - SUM(h.num_days)) AS remaining
FROM
employees AS e
LEFT JOIN
holiday AS h
ON
h.employee = e.id AND h.to_date between xxxx-09-01 and xxxx-09-01
GROUP BY
e.name
ORDER BY
e.name ASC
答案 1 :(得分:2)
将h.date_to
上的条件添加到ON
条款而不是WHERE
,以避免将其重新变为INNER JOIN
LEFT JOIN
holiday AS h
ON
h.employee = e.id AND h.date_to > ....