首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >左加入不会返回零?

左加入不会返回零?
EN

Stack Overflow用户
提问于 2016-09-30 12:43:51
回答 4查看 79关注 0票数 0

我有一个查询和一个表。查询"EmployeeTraining“包括员工姓名、他们参加的培训课程、参加日期和到期日期。我希望LeftJoin返回的是所有可用的培训课程和每个员工缺少的课程,因此在本质上,所有的培训课程都是无效的。

在"ApplicableTraining“中总共有5条记录。有些员工只选修了4/5的课程,在"EmployeeTraining“记录中只有4条记录。在“日期”和“到期”中,left不应该返回该特定员工的第5项培训项目吗?

适用培训样本:

  • WHMIS
  • 急救
  • 心肺复苏
  • 丙烷
  • TDG

样本EmployeeTraining

  • 2011年3月5日/03/2012
  • 萨姆-第一批AID 2010年09月06/09/2011
  • 萨姆·CPR 2011年3月5日/03/2012
  • 萨姆/丙烷2015年12月03/2018年12/03

期望的结果

  • 2011年3月5日/03/2012
  • 萨姆-第一批AID 2010年09月06/09/2011
  • 萨姆·CPR 2011年3月5日/03/2012
  • 萨姆/丙烷2015年12月03/2018年12/03
  • Sam,TDG,TDG

这是通过Access的Design生成的左联接,但它根本不返回任何空值。

代码语言:javascript
复制
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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-09-30 13:01:33

您需要在表:Employee和table之间进行交叉连接:左联接后的ApplicableTraining:EmployeeTraining。

交叉连接,将表A中的所有记录与表B连接起来,而不考虑它们之间的连接。

代码语言:javascript
复制
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 | |
票数 1
EN

Stack Overflow用户

发布于 2016-09-30 12:45:53

如果该查询不返回空,则不存在空。

可以通过添加WHERE EmployeeTraining.Training IS NULL进行测试

票数 2
EN

Stack Overflow用户

发布于 2016-09-30 12:50:12

您缺少为表提供别名的where condition.Try。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39791826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档