这几天我一直在为此苦苦挣扎,所以如果我过度混淆了事情,我深表歉意......
我有一系列表定义:
- 技能组
- 技能
- 上述组内的技能(多对多)
- 工作角色
- 这些工作角色的技能(多对多)
数据库的结构如下所示:
我需要创建一个显示以下数据的结果集:
对于所有工作角色,显示这些工作角色中的所有技能。但是,也包括各个组中未包含在每个角色中的技能(用 NULL 或任何其他方法表示)。
请参阅此工作代码以创建表和数据。 SQL Fiddle
抱歉,我做了很多插入来创建一个现实的例子。
请注意,该PowerPoint
技能并未添加到HR Manager
角色中,而是添加了来自同一组的其他技能。另请注意,该Recruitment Policy
技能并未添加到Software Manager
角色中,但我不需要看到此差距,因为该角色中不存在该组中的其他技能。
我的目标是这样的(为简洁起见,不包括超级明星角色):
RoleTitle GroupTitle SkillTitle SkillIsInRole
----------------------- -------------------------- --------------------------------------
Software Manager Microsoft Office Excel 1
Software Manager Microsoft Office Word 1
Software Manager Microsoft Office PowerPoint 1
Software Manager Microsoft SQL Server Query Design 1
Software Manager Microsoft SQL Server Stored Procedures 1
Software Manager Microsoft SQL Server Failover Clustering 1
HR Manager Microsoft Office Excel 1
HR Manager Microsoft Office Word 1
HR Manager Microsoft Office PowerPoint NULL <-- not added to role but exists in same group as other used skills
HR Manager HR Recruitment Policy 1