如何连接事件表来报告非事件?



员工必须完成继续教育模块才能胜任工作。我需要建立一个报告,向主管展示他们的员工完成了哪些模块,哪些模块没有完成。

我有一个简单的员工和他们的主管的表格。每行是一个员工,有两列:Supervisor Name和employee Name。将其称为Staff表。

因为我们不知道每个员工被分配了什么模块。然后假设每个模块必须与每个员工相关联,并构建该关联。

要做到这一点,我们使用CROSS JOIN,它是一个表的每条记录与另一个表的每条记录相关。注意,这将导致笛卡尔积。(1000*1000) = 1,000,000条记录!但是每个员工都被分配了一个模块。

SELECT ...
FROM SupervisorEmployee E 
CROSS JOIN Modules  M -- This cross join ensure every employee is assigned every 
-- record.  note there is no ON clause when using a cross join.
LEFT JOIN Completions C 
on {keys} 
WHERE...

注意:因为我们使用的是左连接。where子句应该只对superoreemployee和Modules表有限制。它不应该对完成表有限制,否则它将否定左连接。(你可以这样做,但你必须使用or来处理空值这里不设置限制会更简单)

如果需要限制完井;使用On标准执行此操作,以便在连接发生之前/时进行缩减,并且保留不需要完成的记录。

最新更新