从同一张表中提取其他用户不存在的数据

时间:2018-07-10 07:13:42

标签: sql sql-server performance

我想设置我刚接触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

使用有效查询进行更新

0 个答案:

没有答案