본문 바로가기
develop

삭제 된 증가되는 값 찾아보기?

by 파드 2007. 9. 11.
반응형


할 것도 없고 해서 문득 생각난 김에 함 만들어 보았다.

 - 보통 증가되는 값은 키값이고, 어떤 클라이언트들은 중간에 삭제된 이 값들을 빼먹지 말고
   다시 저장 되게 해달라고 한다.
   보통의 채번 하는 쿼리는 대강 max(컬럼) + 1 의 형태 이니까, 일반적으로는 안되고 삽질을
   해야 할 것 같다.

WITH abc AS(
SELECT 1 AS num, 'ab' a FROM dual UNION ALL
SELECT 2 , 'cd' a FROM dual UNION ALL
SELECT 3 , 'ef' a FROM dual UNION ALL
SELECT 4 , 'gh' a FROM dual UNION ALL
SELECT 5 , 'ij' a FROM dual UNION ALL
SELECT 6 , 'kl' a FROM dual UNION ALL
SELECT 8 , 'mn' a FROM dual UNION ALL
SELECT 9 , 'op' a FROM dual UNION ALL
SELECT 10 , 'qr' a FROM dual UNION ALL
SELECT 11 , 'st' a FROM dual
)

SELECT MIN(a.rn) --, b.*
FROM
(
 SELECT ROWNUM AS rn
 FROM dual
 CONNECT BY ROWNUM <= (SELECT COUNT(*) FROM abc)
) a
LEFT JOIN
( SELECT num, a FROM abc) b
ON a.rn = b.Num
WHERE num IS NULL


일단은 간단하게 위에 처럼 만들어 봤다.


그렇다면 ms sql은?

with abc AS(
SELECT 1 AS num, 'ab' a  UNION ALL
SELECT 2 , 'cd' a  UNION ALL
SELECT 3 , 'ef' a  UNION ALL
SELECT 4 , 'gh' a  UNION ALL
SELECT 5 , 'ij' a  UNION ALL
SELECT 6 , 'kl' a  UNION ALL
SELECT 8 , 'mn' a  UNION ALL
SELECT 9 , 'op' a  UNION ALL
SELECT 10 , 'qr' a  UNION ALL
SELECT 11 , 'st' a
)

select identity(int, 1, 1) as aa
into #temp
from abc

select min(a.aa) --, b.*
from #temp a
left join abc b on a.aa = b.num
where b.num is null


둘다 거의 같은 방식이다.
원래 테이블의 총카운트를 구해서 새로운 임시테이블을 구성하고 다시 원래 테이블과 비교하여
빠진 번호를 찾는다는 컨셉이다.

반응형