I가 예상대로 작동은 다음 두 쿼리 :결합하여 두 개의 쿼리
declare @user varchar(3)
declare @phrase varchar(255)
set @user = 'xyz'
set @phrase = '%nav%'
select ug.*, wap.*, w.*
from user_groups ug
inner join widget_access_permissions wap on ug.id = wap.allowed
inner join widgets w on wap.widget_id = w.widget_id
where ug.employee_code = @user
and w.widget_name like @phrase
select w.widget_id, ug.*, wdp.*, w.*
from user_groups ug
inner join widget_deny_permissions wdp on ug.id = wdp.denied
inner join widgets w on wdp.widget_id = w.widget_id
where ug.employee_code = @user
and w.widget_name like @phrase
첫 번째 쿼리가 @user가 제공하는 @phrase에 따라 데이터에 액세스 할 수있는 임의의 위젯에 대한 기록을 보여줍니다. 두 번째 쿼리는 제공된 @phrase를 기반으로 @user가 액세스 할 수없는 위젯에 대한 레코드를 보여줍니다.
누군가이 그룹을 기반으로 액세스 권한을 가지고 있지만 거부 테이블에 거부 된 다른 그룹에 있기 때문에 결과를 볼 수 없으므로이 두 쿼리를 1로 결합 할 수 있습니까? 내 마지막 문장이 의미가 있다면 나도 몰라
...
편집 : 추가 된 테이블 이름, 테이블 컬럼과 약간의 샘플 데이터 : 만약 내가 제대로 이해하고
user_groups
table
id
display_value
employee_code
dept
persnl_typ_code
sample row 1
1000
group 1
xyz
i.t.
gen
sample row 2
1008
group 2
xyz
i.t.
gen
==========
widget_access_permissions
table
id
widget_id
allowed
sample row
0
0
1000
==========
widget_deny_permissons
table
id
widget_id
denied
sample row
0
0
1008
==========
widgets
table
widget_id
widget_name
widget_description
widget_header
widget_sub_header
widget_content
sample row
0
widget name goes here
widget description goes here
widget header goes here
widget sub header goes here
widget content goes here
귀하의 가정은 정확합니다. – oshirowanen