左连接不会将无法匹配的行返回为空

时间:2014-06-30 05:52:50

标签: sql ms-access ms-access-2007 ms-access-2010

在我的左表上,我将所有EMP信息与所有可能的资产联合起来,因此所有员工都被分配到数据库中列出的所有课程。和正确的表我只有已经参加或正在参加课程的员工。(两个表都是查询,结果是正确的)

我想在两个表(查询)之间进行左连接,所以我从左表联合右表中获得所有员工的新列(完成日期和完成状态)!

但是,当我执行left-join时,它会返回我的所有行并填充空白,其中包含Completion Status的两种可能性,即Completed OR in Progress)。当我添加完成日期并返回一些随机日期并填写完成日期的所有行并重复这些行以用于以下资产标题时,最愚蠢的事情发生。

我的结果应该是所有EMP联合列表,其中包含当前状态所需的课程,此人是否已完成课程,我希望所有这些不相关的行都为null。你会善良并检查我的代码,让我知道是什么原因导致这个问题?谢谢

SELECT qryEmployeeCourse.[EMP ID], qryEmployeeCourse.Name, qryEmployeeCourse.Role, qryEmployeeCourse.Location, qryEmployeeCourse.Region, qryEmployeeCourse.[Asset ID], qryEmployeeCourse.[Asset Title], qryCourseStatus.[Completion Status]

FROM qryEmployeeCourse LEFT JOIN qryCourseStatus ON qryEmployeeCourse.[EMP ID] = qryCourseStatus.Username

GROUP BY qryEmployeeCourse.[EMP ID], qryEmployeeCourse.Name, qryEmployeeCourse.Role, qryEmployeeCourse.Location, qryEmployeeCourse.Region, qryEmployeeCourse.[Asset ID], qryEmployeeCourse.[Asset Title], qryCourseStatus.[Completion Status]
ORDER BY qryEmployeeCourse.Name, qryEmployeeCourse.Role, qryEmployeeCourse.Location;

http://i.stack.imgur.com/0zNVz.png这是我的表和结果的图片。

1 个答案:

答案 0 :(得分:0)

在我看来你的LEFT JOIN应该是

qryCourseStatus ON qryEmployeeCourse.[EMP ID] = qryCourseStatus.Username AND qryEmployeeCourse.AssetID = qryCourseStatus.AssetID

否则,您将获得一个交叉连接(qryEmployeeCourse中的所有行,每个员工都有qryCourseStatus中的所有行)。

在屏幕截图中的第一组结果中,您只获得两行,因为qryCourseStatus中的员工记录只有两个不同的状态CompletedIn progress,而您的分组依据是全部删除其他重复。

您在第二组结果中获得了更多行,因为您要为此员工添加Completion Date,其中包含7个不同的值。