员工必须完成继续教育模块才能胜任工作。我需要建立一个报告,向主管展示他们的员工完成了哪些模块,哪些模块没有完成。
我有一个简单的员工和他们的主管的表格。每行是一个员工,有两列: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标准执行此操作,以便在连接发生之前/时进行缩减,并且保留不需要完成的记录。