DB 쿼리를 이용하여 특정 컬럼의 값 중에서 없는 값 하나를 임의로 얻어오는 쿼리를 고민중입니다. 예를 들어 어떤 값이 1~4000까지의 값 중 하나이어야 하고, 중복되는 값이 들어가면 안 될 경우 사용하고 싶은 쿼리이지요. 가능한 값 중 가장 작은 값을 얻어오는 쿼리입니다.
저는 이래저래 찾아보다 temp table에 1~4000 값을 생성한 후 뽑아오는 방법을 생각했는데, 동료 분은 한 테이블의 값을 -1 해서 이전 값을 제거하고 남은 값에 +1해서 원하는 값을 추출해 내는 쿨한 방법을 생각해 내셨네요. ^^ 단, 방법2)를 사용할때는 케이블에 값이 하나도 없는 경우와 첫번째 값이 없는 경우에 대한 처리를 따로 추가해 주어야 합니다.
방법 1) 임시 테이블 생성 후 NOT IN 쿼리
with tmp(c1) as (
values (1)
union all
select c1+1
from tmp
where c1<=4000
)
SELECT * FROM tmp
WHERE c1 NOT IN
(
SELECT nodeid FROM tbnode
);
SELECT min(nodeid) + 1 FROM TBNODE
WHERE NODEID NOT IN
(
SELECT nodeid -1 FROM TBNODE
);
'Programming > Database' 카테고리의 다른 글
[DB2] 이미 생성된 테이블 정보 수정하기 (0) | 2010.06.23 |
---|---|
[DB2] CHAR 변환 후 공란제거하기 (0) | 2010.06.23 |
[DB2] 테이블 정보 얻어오기 (0) | 2010.06.23 |
[DB2,MSSQL] 테이블 복사하기 (0) | 2010.06.23 |
[MS-SQL] IP 스트링 변환하기 (1) | 2010.06.23 |
댓글