我想设置我刚接触SQL的上下文并学习很多东西。我在sql查询中遇到了新要求。
我有一个命令表,该表将有针对不同用户的命令,这些用户将有一个全局用户。主键是commandid,用户,命令类别的组合。
现有数据具有针对全局用户的所有命令,但不适用于其他用户。因此,我需要编写一个从全局用户到其他用户的查询。这里的挑战是,可能没有几个命令属于一个用户和全局用户,而属于其他用户。
要求所有其他用户都应使用所有具有用户名的命令。
我创建了一个没有挑战部分的查询,因为所有用户将没有一个命令并为所有用户插入。
遵循的步骤: 1)获取全局用户的所有命令 2)获取其他用户的所有命令 3)加入他们以获得全球设置 4)过滤它们或删除已经存在的命令 5)您将获得所需的setcomamnds 6)与其他用户交叉加入
这在正常情况下对我有用,但没有返回上表情况下所需的输出。提前致谢。我正在使用SQL2012
查询是:
select * from (select c1.* from (select * from commands where userid=1) c1 left join (select * from commands where userid<>1) c2 on c1.commandid = c2.commandid where c2.userid is null) allcommands cross join (select distinct userid from commands where userID<>1) users
带有质询的示例表:
UserID CommandID Category CommandName Shortcut
1 1 Menu File Ctrl+F
1 2 Menu Save Ctrl+S
1 3 Menu Copy Ctrl+C
1 4 Menu Delete Ctrl+D
2 1 Menu File Ctrl+F
2 2 Menu Save Ctrl+S
2 3 Menu Copy Ctrl+C
3 1 Menu File Ctrl+F
3 2 Menu Save Ctrl+S
3 4 Menu Delete Ctrl+D
4 1 Menu File Ctrl+F
4 2 Menu Save Ctrl+S
使用有效查询进行更新