MS-SQL Server
Table A (Study_ID,Issue_Id)
XX,1
BB,2
Table B (Study_ID,System_Id)
XX,User1
BB,User2
XX,User2
View V : (Issue_Id,System_Id)
2,User1
View V应该为Table A
提供System_Id X
的所有问题,Table B
和Study
的组合不在SytemID
} p>
目的是,表A具有问题(Issue_Id),它们与Study(Study_id)相关联。如果用户User1登录到系统,他应该能够看到表A中的所有问题,除了具有用户没有权限的study_id的问题。表B表示用户没有权利的StudyId
如何以有效的方式实现这一目标?
答案 0 :(得分:0)
您可以尝试列出Study_IDs和System_IDs的所有组合,然后通过左连接,您可以看到该组合是否存在。
我对您对用户权限的评论感到有些困惑。这更像是一个数据库问题,还是在AND System_ID = 'User1'
语句中使用WHERE
作为解决方案?
WITH T_A AS (SELECT *
FROM ( VALUES ('XX', 1)
, ('BB', 2)
) x (Study_ID, Issue_ID)
)
, T_B AS (SELECT *
FROM ( VALUES ('XX', 'User1')
, ('BB', 'User2')
, ('XX', 'User2')
) x ( Study_ID, System_ID)
)
SELECT Issue_ID, USERS.System_ID
FROM T_A
INNER JOIN (SELECT DISTINCT System_ID FROM T_B) USERS
ON 1 = 1
LEFT JOIN T_B
ON T_A.Study_ID = T_B.Study_ID
AND USERS.System_ID = T_B.System_ID
WHERE T_B.Study_ID IS NULL
答案 1 :(得分:-2)
这是一种方法:
select * from a
except
select * from b