首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NOT不存在于具有相同值的多个记录中。

NOT不存在于具有相同值的多个记录中。
EN

Stack Overflow用户
提问于 2022-02-08 06:39:13
回答 1查看 131关注 0票数 0

我试图为用户创建一个SQL查询,用户应该在数据库中为该研究提供相应的授权访问权限。对于ex,如果用户拥有20条授权记录的总数,那么该用户应该拥有撤销记录的总数。如果没有,我们需要输入丢失的记录。

我创建了以下查询。该查询对于有单个授权记录供学习的用户运行良好,但如果用户有用于特定学习的多个授予记录,则该查询不起作用。

为了前夫。用户A有两个授权记录和一个撤销记录供学习ABC。下面的查询没有显示任何输出,因为该研究已经列出了撤消记录。

但我们只有一份撤销这项研究的记录。所以我想显示丢失的格兰特记录

代码语言:javascript
复制
SELECT Getdate() [RequestedDate],
   Getdate() [ApprovedDate],
   A.requestedfor,
   'XXX'    [ApprovedBy],
   A.projectnumber,
   'Revoke'  [AccessRequestType]
 
FROM   [dbo].[Table1] A
WHERE  A.requestedfor  = 1234
   AND A.accessrequesttype = 'Grant'
   AND NOT EXISTS (SELECT *
                   FROM   [dbo].[Table1] B
                   WHERE  B.requestedfor =1234
                          AND B.accessrequesttype = 'Revoke'
                          AND A.projectnumber =  B.projectnumber
                          AND A.accessgroup = B. accessgroup
                          AND A.RequestedFor = B. RequestedFor
                          ) 
EN

回答 1

Stack Overflow用户

发布于 2022-02-08 09:26:24

通过对行编号,我们可以将授权与REVOKEs配对,并将不匹配/超额授权作为新的Revoke条目返回:

代码语言:javascript
复制
 select
   Getdate() [RequestedDate],
   Getdate() [ApprovedDate],
   A.requestedfor,
   'XXX'    [ApprovedBy],
   A.projectnumber,
   'Revoke'  [AccessRequestType]
from (
    SELECT requestedfor, projectnumber, seq=row_number() over (order by RequestedFor)
    FROM Table1
    where RequestedFor=1234
    and AccessRequestType='Grant'
    except 
    SELECT requestedfor, projectnumber, seq=row_number() over (order by RequestedFor)
    FROM Table1
    where RequestedFor=1234
    and AccessRequestType='Revoke'
    ) a
     ```
@maxim's proposal should also work.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71029527

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档