左连接不会 Return 为空值?

Left Join Won't Return Nulls?

我有一个查询和一个 Table。查询 "EmployeeTraining" 包括员工姓名、他们参加的培训课程、参加日期和到期时间。我希望 LeftJoin 到 return 的是所有可用的培训课程和每个员工缺少的课程,所以在本质上,任何空值。

"ApplicableTraining"中总共有 5 条记录。一些员工只参加了4/5的课程,在"EmployeeTraining"记录中只有4条记录。在 "datetaken" 和 "Expiry" 中不应该加入 return 该特定员工的第 5 个培训项目?

适用培训示例:

员工培训样本

期望的结果

这是通过 Access 上的设计视图生成的左联接,但它 return 根本没有任何空值。

SELECT ApplicableTraining.AppTraining, 
EmployeeTraining.Employee, 
EmployeeTraining.DateTaken, 
EmployeeTraining.Expiry

FROM ApplicableTraining LEFT JOIN EmployeeTraining ON ApplicableTraining.AppTraining = EmployeeTraining.Training;

我在这里上传了我的数据库https://drive.google.com/open?id=0B7foIFlbSH78cFpJOHFsYkxiUlU

如果那个查询returns没有空值,那么就没有空值

你可以通过添加WHERE EmployeeTraining.Training IS NULL

来测试

您缺少 condition.Try 为表格指定别名的位置。

SELECT at.AppTraining, 
       et.Employee, 
       et.DateTaken, 
       et.Expiry
FROM ApplicableTraining at
  LEFT JOIN EmployeeTraining et ON at.AppTraining = et.Training
WHERE et.Training IS NULL

尝试使用不同的存在性运算符进行健全性测试,例如

SELECT ApplicableTraining.AppTraining
  FROM ApplicableTraining a
 WHERE NOT EXISTS ( SELECT * 
                      FROM EmployeeTraining a
                     WHERE a.AppTraining = e.Training );

如果这个returns什么都没有那么就没有缺失值。

您需要在 table:Employee 和 table:ApplicableTraining 之间进行 CROSS JOIN,然后再与 view:EmployeeTraining 进行 LEFT JOIN。

CROSS JOIN,将来自 table A 的所有记录与 table B 连接起来,无论它们的 tables 之间的连接如何。

Sample Applicable Training:

WHMIS
First Aid
CPR
Propane
TDG

Sample Employee

SAM

Result:
SELECT ApplicableTraining.AppTraining, Table[Employee].Employee
FROM ApplicableTraining 
CROSS JOIN Table[Employee]

WHMIS|SAM
First Aid|SAM
CPR|SAM
Propane|SAM
TDG|SAM

Desired Results

SELECT  Table[Employee].Employee, 
        ApplicableTraining.AppTraining, 
        EmployeeTraining.DateTaken, 
        EmployeeTraining.Expiry
FROM ApplicableTraining 
CROSS JOIN Table[Employee]
LEFT JOIN EmployeeTraining ON ApplicableTraining.AppTraining = EmployeeTraining.Training and EmployeeTraining.Employee = Table[Employee]."EmployeeID"

Sam | WHMIS | 05/03/2011 |05/03/2012
Sam | First AID | 06/09/2010 | 06/09/2011
Sam | CPR | 05/03/2011 | 05/03/2012
Sam | Propane | 12/03/2015| 12/03/2018
Sam | TDG | |