Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将WHERE子句添加到JOIN语句_Mysql - Fatal编程技术网

Mysql 将WHERE子句添加到JOIN语句

Mysql 将WHERE子句添加到JOIN语句,mysql,Mysql,我有两张桌子,员工和假期 我正在尝试选择一个员工列表,在查看了今年为输入的假期后,他们的允许假期和剩余假期 表如下所示(仅显示重要行) 我的当前查询可以找到这些值,但我想添加一个WHERE子句,以便在date_to>xxxx-09-01和

我有两张桌子,员工和假期

我正在尝试选择一个员工列表,在查看了今年为输入的假期后,他们的允许假期和剩余假期

表如下所示(仅显示重要行)

我的当前查询可以找到这些值,但我想添加一个WHERE子句,以便在date_to>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子句,但如果不将员工从未列出假日的数据中删除。

h.date\u to
上的条件添加到
on
子句中,而不是
where
中,以避免将其变回
内部联接

  LEFT JOIN 
        holiday AS h
    ON
        h.employee = e.id AND h.date_to > ....

在执行左联接时,筛选条件必须位于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

虽然可以将条件作为WHERE子句添加到内部join中,但我个人更喜欢将它们添加到on语句中,以匹配te LEFT和RIGHT join语句。但是,男人桌子的过滤器必须在WHERE语句中,所以看起来有点奇怪。这就是为什么我更喜欢ORACLE的方法。
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