将WHERE子句添加到JOIN语句

时间:2011-12-21 11:46:53

标签: mysql

我有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子句,但没有从没有列出假期的数据中删除员工。

2 个答案:

答案 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 > ....
相关问题