database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 6912 게시물 읽기
No. 6912
조직도 하위 부서를 검색하는 쿼리 질문 (__)
작성자
초보쿼리
작성일
2015-05-27 19:56ⓒ
2015-05-27 20:23ⓜ
조회수
7,323

 아래와 같이 조직이 있습니다.

테이블 구조는 (id,name,parentid)로 구성되어 있습니다.

 

사장실

 - 1본부

     - 1실

          -1팀

     - 2실

     - 3실

 - 2본부

     -1실

     -2실

     -3실

 - 3본부

     -1실

     -2실

     -3실

 

이렇게 하위 부서를 가지는 사장실이라는 부서가 있을때

해당 사장실을 기준으로 하위 부서를 한번에 다 가져오는 쿼리가 필요합니다...

단, 문제는 CTE나... 재귀쿼리를 사용하지 않고 Select 문으로만 가능한지

가능하다면 고수님들의 많은 답변 부탁 드리겠습니다.

 

 - CTE 나 재귀쿼리를 사용하지 않으려는 이유는 해당 검색 조건은 IN 안의 저 조회 결과가 나와야 되기 때문입니다.

 

이 글에 대한 댓글이 총 3건 있습니다.

 -. CTE 없이? 가능은 하지만

  1. 가독성이 매우 떨어지며
  2. 성능이 개판이 될 가능성이 높기 때문에

적극적으로 비추


-. CTE로 뽑은 후에 INNER JOIN 하거나 WHERE 부서 EXISTS ( SELECT TOP (1) 1 FROM CTE테이블 WHERE 부서 = CTE테이블.부서 ) 정도면 필터링 되겠죠?

우욱님이 2015-05-28 02:11에 작성한 댓글입니다. Edit

아... 속았어...

DECLARE @kk INT;
SET @kk = 1;
WITH 나는CTE ( bb )
AS
(
SELECT 1
UNION ALL SELECT 2 
)
SELECT 1
WHERE @kk IN ( SELECT bb FROM 나는CTE )
;
 
CTE라고 IN 안쪽에 사용 못 될 이유가 없잖.. 헐.. 대박..
우욱님이 2015-05-28 02:15에 작성한 댓글입니다. Edit

예전에 썼던 방식인데.

 

부서코드,부서명,레벨,부서트리,

10000, 사장실, 0, 10000

10100, 1본부, 1, 10000:10100

10110, 1실, 2, 10000:10100:10110

10110, 1팀, 3, 10000:10100:10110:10111

10120, 2실, 2, 10000:10100:10120

10120, 3실, 2, 10000:10100:10130

 

select *

from 부서

where 부서트리 like '%10000%'

 

검색시 인텍스를 사용하지 않는 문제점이 있지만,

부서테이블이 크지않으므로 속도에는 문제가 없죠

이승철(yamyo)님이 2015-07-18 21:16에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6915ms-sql을 -> mysql로 바꾸려면..
김다윗
2015-07-03
4913
6914select 후 insert 질문입니다. [5]
꽃씨하나
2015-06-18
5998
6913SQL 초보자 입니다. [1]
혀니
2015-06-15
5926
6912조직도 하위 부서를 검색하는 쿼리 질문 (__) [3]
초보쿼리
2015-05-27
7323
6911안녕하세요 쿼리질문좀 드립니다. [1]
투루로맨스
2015-05-18
6409
6910조회쿼리 만들기. [2]
초보입니다.
2015-05-18
7737
6909업데이트 쿼리문 질문입니다. [4]
코우지
2015-05-12
5231
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다