>

DB에 두 개의 테이블이 있습니다

  • profilePermission =>열 (profileid, permissionid, profilename)

  • Permissions =>열 (permissionid, permissionname)

각 프로파일은 여러 권한을 가질 수 있습니다. (예 : profile1은 permission1, permission2, permission3을 가질 수 있고 profile2는 permission3, permission2를 가질 수 있습니다

Permissions.permissionname = permission1 및 permissions.permissionname! = permission2 그리고 그 반대의 profileid 수를 가져 오는 쿼리를 작성하고 싶습니다.

이와 같은 것을 시도했습니다

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

하지만 작동하지 않았습니다.


  • 답변 # 1

    집합 함수 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)
    
    

  • 답변 # 2

    올바른 selectquery를 찾았습니다

    입니다

    select profileid  from  CrmProfilePermissions
    join CrmPermissions on CrmProfilePermissions.permissionid=CrmPermissions.permissionid
    where  name in ('permission1','permission2')
    group by (profileid)
    having count(distinct name)=1;
    
    

  • 답변 # 3

    두 가지 수준의 집계를 권장합니다 :

    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;
    
    

관련 자료

  • 이전 google chrome devtools - 웹 사이트의 자바 스크립트 기능을 어떻게 교체 할 수 있습니까?
  • 다음 batch file - '&'근처의 구문이 잘못되었습니다 - 그것을 탈출하는 방법