이 문제의 목적이 무엇인지는 파악할 수가 없지만 문제 그대로 해석해서 한번 풀어
보도록 하죠..
일단 쿼리만 가지고는 해결할 수 없을 것같고 프로그램을 가지고 풀 수 있을 것 같습
니다.
1. ID로 Orderby해서 Select하고(Cursor선언) Fetch를 합니다.
2. Fetch한 데이터 중 ID를 atoi해서 INT값으로 변환해서 버퍼에 보관합니다.
3. 다음 데이터를 Fetch해서 ID를 atoi해서 전 데이터와의 차이를 구해서 그 차이수가 1이 아니면 그 차이수 만큼 임의로 만들어서 넣습니다.
위의 것을 로직으로 재구성하는 것은 매우 간단한데
int dif, cur_id, prev_id=-1;
cursor 선언(orderby 는 ascending으로 합니다)
while(FLAG)
{
fetch data;
if no data then while문 break;
cur_id=atoi(id);
if prev_id == -1 then 현재 데이터 처리 (fetch첫번째의 경우)
else
{
diff=cur_id - prev_id -1;
if(diff != 0)
then
{
for(i=0;i<diff;i++)
현재 데이터 처리 및 없는 데이터 생성 루틴 삽입
}
else
{
현재 데이터 처리
}
}
prev_id=cur_id;
}
위의 로직으로 처리가능할 겁니다.(맞았나?)
도움이 되셨는지 모르겠네요..
그럼이만...
> 어떤 테이블에 id 라는 이름을 가지는 열이 문자형식으로 00000001 부터 0005100까지 id 가 입력되
> 어 있는데, 1부터 5100까지 차례대로 하나씩 들어간 자료가 아니라 중간에 몇 개가 빠져서 입력되어 있
> 거든요.
> 예를 들어, id번위가 1부터 10까지 인데 id 가 1,2,3,4,7,8,9,10 (id 6과 7은 null값이 아니라 이
> 에 대한 자료가 입력이 안되서 레코드가 없는 상태) 에 해당하는 자료만 입력되어 있으면, 이처럼 중간
> 에 빠진 id를 mysql 상에서 sql문으로 어떻게 촐력할 수 있는지 모르겠네요. 그러니까 여기선 중간에
> 빠진 id가 6과 7이므로 빠진 id, 6 과 7를 출력해 내야 하거든요. 제 실력으론 역부족이군요. 어떻게
> 명령문을 써야 할지!!! 명령문이나 해답을 가르쳐 주시면 감사하겠습니다! 도움을 부탁합니다.
|