Sql 左联元';不返回空值?
我有一个查询和一个表。查询“EmployeeTraining”包括员工姓名、参加的培训课程、参加的日期和有效期。我希望LeftJoin返回的是所有可用的培训课程和每个员工缺少的课程,因此在essense中,任何空值 “应用培训”中共有5条记录。一些员工只参加了4/5的课程,在“员工培训”记录中只有4项记录。left join是否应该返回该特定员工的第五个培训项目,并且“DateTake”和“Expiry”中的值为空 适用培训样本:Sql 左联元';不返回空值?,sql,ms-access,left-join,Sql,Ms Access,Left Join,我有一个查询和一个表。查询“EmployeeTraining”包括员工姓名、参加的培训课程、参加的日期和有效期。我希望LeftJoin返回的是所有可用的培训课程和每个员工缺少的课程,因此在essense中,任何空值 “应用培训”中共有5条记录。一些员工只参加了4/5的课程,在“员工培训”记录中只有4项记录。left join是否应该返回该特定员工的第五个培训项目,并且“DateTake”和“Expiry”中的值为空 适用培训样本: WHMIS 急救 心肺复苏 丙烷 TDG 雇员培训样本 S
- WHMIS
- 急救
- 心肺复苏
- 丙烷
- TDG
- Sam | WHMIS | 2011年3月5日| 2012年3月5日
- Sam |急救| 2010年9月6日| 2011年9月6日
- Sam | CPR | 2011年3月5日| 2012年3月5日
- Sam |丙烷| 2015年3月12日| 2018年3月12日
- Sam | WHMIS | 2011年3月5日| 2012年3月5日
- Sam |急救| 2010年9月6日| 2011年9月6日
- Sam | CPR | 2011年3月5日| 2012年3月5日
- Sam |丙烷| 2015年3月12日| 2018年3月12日
- Sam | TDG ||
SELECT ApplicableTraining.AppTraining,
EmployeeTraining.Employee,
EmployeeTraining.DateTaken,
EmployeeTraining.Expiry
FROM ApplicableTraining LEFT JOIN EmployeeTraining ON ApplicableTraining.AppTraining = EmployeeTraining.Training;
我在这里上传了我的数据库如果查询没有返回空值,那么就没有空值
您可以通过在EmployeeTraining.Training为NULL的位置添加
进行测试,如果该查询没有返回NULL,那么就没有NULL
您可以通过添加WHERE EmployeeTraining进行测试。Training为NULL
您缺少WHERE条件。请尝试为表提供别名
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
缺少where条件。请尝试为表指定别名
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 );
如果此操作不返回任何值,则不存在缺失值。请尝试使用其他存在运算符进行健全性测试,例如
SELECT ApplicableTraining.AppTraining
FROM ApplicableTraining a
WHERE NOT EXISTS ( SELECT *
FROM EmployeeTraining a
WHERE a.AppTraining = e.Training );
如果此操作不返回任何值,则不会丢失任何值。您需要在表:Employee和表:applicatabletraining之间执行交叉联接,然后使用视图:EmployeeTraining左联接
交叉连接,将表A中的所有记录连接到表B,而不管它们的表之间的连接如何
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 | |
在使用view:EmployeeTraining进行左连接之后,需要在table:Employee和table:applicatabletraining之间进行交叉连接
交叉连接,将表A中的所有记录连接到表B,而不管它们的表之间的连接如何
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 | |
我会留下这个作为评论,但是的,我同意。我用一些样本数据更新,我相信我在这里做错了什么。我会留下这个作为评论,但是的,我同意。我用一些样本数据更新,我相信我在这里做错了什么。添加一些样本表数据,和预期结果。显然,没有任何课程没有任何员工。一些员工参加了4/5的培训课程,并且在查询中有4条记录。Left Join不应该返回第五个培训课程,在“DateTake”和到期日中为空吗?您的查询应该可以按照您的问题中的方式工作,我刚刚尝试过。您是否从查询中删除了任何内容(如员工的WHERE子句)?您是否在ApplicatableTraining和EmployeeTraining之间定义了关系?ApplicatableTraining和EmployeeTraining(查询)具有一对多关系。EmployeeTraining查询基于我们的employee表和3个不同的培训表。添加一些示例表数据和预期结果。显然,没有任何课程没有任何员工。一些员工参加了4/5个培训课程,并且在查询中有4条记录。Left Join不应该返回第五个培训课程,在“DateTake”和到期日中为空吗?您的查询应该可以按照您的问题中的方式工作,我刚刚尝试过。您是否从查询中删除了任何内容(如员工的WHERE子句)?您是否在ApplicatableTraining和EmployeeTraining之间定义了关系?ApplicatableTraining和EmployeeTraining(查询)具有一对多关系。EmployeeTraining查询基于我们的employee表和3个不同的培训表。交叉联接与外部联接相同吗?它似乎不想识别交叉连接。它似乎可以识别外部连接,但我仍然无法获得所需的结果。我更新了我的答案。更多信息请参见:交叉连接与外部连接相同吗?它似乎不想识别交叉连接。它似乎可以识别外部连接,但我仍然无法获得所需的结果。我更新了我的答案。更多信息,请访问: