버전 : PostgreSQL 9.6.14, compiled by Visual C++ build 1800, 64-bit
본인 포함 팀코드가 같은 팀원을 00010(팀원을) 모두 가져오고 싶습니다.
사원으로 로그인하면 본인의 아이디만 대입하여 본인것만 가져옵니다.
참고 블로그 글
1. 게시판의 리스트를 가져온다고 가정하고
- 작성자 : 본인 게시물만
- 팀장 : 팀의 모든 게시물
- 부서장 : 해당부서의 모든 게시물
- 대표 : 모든 부서의 게시물
- 관리부서 : 모든 부서의 게시물
이렇게 리스트를 보여주어야 한다면
2. 필요한 건 아래 2가지만 있으면 되고 프로시져로 넘길 파라미터는 조회자의 id하나면 충분하다.
- 조회자의 id
- 조회자의 부서와 직책등을 가지고 있는 테이블의 정보
3. 게시판 table : board_list
- pk : no identity(1,1)
- 작성자 id : reg_user_id
- 작성자 team : team_code
- 작성자 부서 : div_code
- title, content, cdate 등 필요한 컬럼 추가
사용자 table : user
- user_id : 사용자 id
- 팀장 권한 : team_b = 1
- 부서장 권한 : div_b = 1
- 대표 권한 : ceo_b = 1
- 팀 코드 : team_code
- 부서 코드 : div_code
여기서 사용자 테이블에 부서 코드까지는 없어도 되고 조직 테이블에서 조인으로 가져와도 된다. 편의상 사용자 table에 모든 정보가 있다고 가정하자.
4. 쿼리 작성
- 프로시져 파라미터 : 조회자 id : @user_id
select * from board_list with(nolock) where reg_user_id in ( /* 조회자의 부서와 직책은 파라미터로 넘기지 않아도 된다. user 테이블을 가지고 모든 것을 판단해서 리스트를 가져온다. 리스트를 가져올 때 union all 을 사용해서 조회 권한이 있는 모든 사용자의 글을 가져온다. */ -- 1. 작성자 본인 게시물 select user_id from user u1 with(nolock) where user_id = @user_id union all -- 2. 팀장일 경우 팀원이 작성한 모든 글 -- 조회자가 팀장일 경우에는 팀 코드를 가져오고 해당 팀코드로 작성된 모든 글을 가져온다. select user_id from user u1 with(nolock) where u1.team_code in (select team_code from user u2 with(nolock) where u2.user_id = @user_id and u2.team_b = '1' ) union all -- 3. 부서장일 경우 부서원이 모두 작성한 글 -- 조회자가 부서장일 경우에는 부서 코드를 가져오고 해당 부서코드로 작성된 모든 글을 가져온다. select user_id from user u1 with(nolock) where u1.div_code in (select div_code from user u2 with(nolock) where u2.user_id = @user_id and u2.div_b = '1' ) union all -- 4. 대표일 경우 모든 직원이 작성한 글 -- 조회자가 대표일 경우에는 모든 글을 가져온다. -- 대표자일 경우 A 서브 쿼리에서 값이 있을 것이고 따라서 u1 테이블의 모든 사용자가 리턴된다. select user_id from user u1 with(nolock) where exists (select 'x' --> A from user u2 with(nolock) where u2.user_id = @user_id and u2.ceo_b = '1' ) union all -- 5. 관리 부서일 경우 모든 직원이 작성한 글을 가져온다. -- 조회자의 team_code가 'AA1'일 경우에는 서버 쿼리의 값이 있게 되고 u1 테이블의 모든 데이터를 가져온다. select user_id from user u1 with(nolock) where exists (select 'x' --> A from user u2 with(nolock) where u2.user_id = @user_id and u2.team_code = 'AA1' ) )