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