как написать запрос на выборку по следующим критериям - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть две таблицы в БД

  • profilePermission => столбцы (profileid, allowid, profilename)

  • Permissions => столбцы (allowid, имя разрешения)

Каждый профиль может иметь несколько разрешений.(например, профиль1 может иметь разрешение1, разрешение2, разрешение3 и профиль2 может иметь разрешение3, разрешение2

Я хочу написать запрос, который выбирает счетчик профиля, который имеет permissions.permissionname = разрешение1 и permissions.permissionname! = разрешение2и наоборот.

Я пробовал что-то подобное

select profileid  
from  CrmProfilePermissions 
join CrmPermissions on CrmProfilePermissions.permissionid=CrmPermissions.permissionid 
where name in ('permission1') and name not in('permission2') 
group by (profileid).

, но это не сработало.

Ответы [ 3 ]

0 голосов
/ 27 сентября 2019

Я нашел правильный запрос select

это

select profileid  from  CrmProfilePermissions
join CrmPermissions on CrmProfilePermissions.permissionid=CrmPermissions.permissionid
where  name in ('permission1','permission2')
group by (profileid)
having count(distinct name)=1;
0 голосов
/ 27 сентября 2019

Я бы рекомендовал два уровня агрегации:

select has_permission1, has_permission2, count(*),
       min(profileid), max(profileid)  -- I just include these as examples
from (select pp.profileid,
             max(case when p.name = 'permission1' then 1 else 0 end) as has_permission1,
             max(case when p.name = 'permission2' then 1 else 0 end) as has_permission2
      from CrmProfilePermissions pp join
           CrmPermissions p
           on pp.permissionid = p.permissionid
      group by pp.profileid
     ) p
group by has_permission1, has_permission2;
0 голосов
/ 27 сентября 2019

у вас отсутствует функция агрегирования count()

select profileid, count(1) as cnt
from CrmProfilePermissions 
join CrmPermissions on CrmProfilePermissions.permissionid=CrmPermissions.permissionid 
where name in ('permission1') and name not in('permission2') 
group by (profileid)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...