SQL查询问题:需显示所有员工,无论是否关联plannerEntries记录
问题分析
你的SQL存在两个核心问题,导致无法显示所有员工:
WHERE子句中对PP.workDate的过滤条件,会直接排除所有没有plannerEntries记录的员工——这类员工的PP.workDate为NULL,NULL与任何值比较都不满足条件,最终被WHERE过滤。INNER JOIN [Job File]会过滤掉无对应job记录的plannerEntries,连带那些没有plannerEntries的员工也被排除。
修改后的SQL
SELECT [EL].[Employee_Numer], [PP].[workDate], [PP].[jobNo], [PP].[workDescription], [PP].[timeOfDay], [JF].[Description], [EL].[Forename], [EL].[Surname] FROM [Employee_List] AS EL LEFT JOIN plannerEntries AS PP ON [PP].[employeeNumber] = [EL].[Employee_Numer] AND [PP].[workDate] >= '$monday' AND [PP].[workDate] <= '$sunday' LEFT JOIN [Job File] AS JF ON [PP].[jobNo] = [JF].[Job No] ORDER BY [EL].[Employee_Numer] ASC;
关键修改说明
- 以员工表为主表做LEFT JOIN:从
Employee_List出发左连接plannerEntries,确保所有员工记录都被保留,无论是否有对应的规划条目。 - 日期过滤移至JOIN ON子句:仅筛选符合日期范围的plannerEntries记录,不会过滤掉无规划条目的员工。
- Job File改用LEFT JOIN:即使规划条目无对应job记录,或员工根本没有规划条目,都不会被排除,对应Job File字段会显示为NULL。
内容的提问来源于stack exchange,提问作者Jackawan
相关产品推荐
相关产品推荐

