Временная таблица или переменная может оказаться самым простым решением.Запишите результаты подзапроса во временную таблицу или переменную, а затем выполните два оператора select в конце вашей процедуры.
Declare @UserAccesses Table (
user_id ...
, access varchar(...)
)
Insert @UserAccesses( user_id, access )
Select UA.user_id, UA.access
From user_access As UA
Join user As U
On U.user_id = UA.user_Id
Where U.is_active = 'True'
And UA.access In('HIGH_LEVEL', 'MEDIUM_LEVEL')
Select ...
From user
Where Exists (
Select 1
From @UserAccess As UA1
Where UA1.user_id = user.user_id
)
Select user_id, access
From @UserAccesses
Обновите данные, учитывая расширение исходного вопроса
Решение для двух подзапросов по сути такое же, как и для одного, за исключением того, что вместо возврата двух наборов результатов вы возвращаете три.Как и раньше, вы используете временную таблицу / переменную для каждого подзапроса:
Declare @UserAccesses Table (
user_id int
, access nvarchar(30)
)
Declare @UserServices Table (
user_id int
, service_id int
, role nvarchar(10)
)
Insert @UserAccesses( user_id, access )
Select UA.user_id, UA.access
From user_access As UA
Join user As U
On U.user_id = UA.user_Id
Where U.is_active = 'True'
And UA.access In('HIGH_LEVEL', 'MEDIUM_LEVEL')
Insert @UserServices( user_id, service_id, role )
Select user_id , service_id,role
From user_service
Where user_service.role ='Manager'
And Exists (
Select 1
From @UserAccesses As UA1
Where UA1.user_id = user_service.user_id
)
Select ...
From user
Where Exists (
Select 1
From @UserServices As US1
Where US1.user_id = user.user_id
)
Select user_id, access
From @UserAccesses As UA
Where Exists (
Select 1
From @UserServices As US1
Where US1.user_id = UA.user_id
)
Select user_id, access
From @UserServices