2016-07-22 2 views
1

테이블 (약 5000 개 항목)의 모든 데이터를 선택하고 각 행에 고유 한 임의 번호 (100000 ~ 999999 사이)를 할당하는 SQL 문을 작성하려고합니다.고유 임의의 숫자가있는 검색어 선택

각 난수가 고유하다는 것을 어떻게 보장 할 수 있습니까?

나는 적어도 일부 RanNum 중복됩니다 (Excel에서 예컨대)

SELECT pid, FLOOR(RAND() * (999999 - 100000 + 1)) + 100000 as 'RanNum' FROM mytable 

체크 같은 것을 시도하십시오. 이 문제를 어떻게 방지 할 수 있습니까?

감사합니다.

답변

1

단일 쿼리에서이 작업을 수행하는 유일한 방법은 범위를 분할하고 범위 당 하나의 숫자를 생성하는 것입니다. 다음과 같은 내용 :

select t.*, 
     floor(rand() * (range/@rn) + 1 + 100000 + (rn - 1) * (range/@rn)) 
from (select t.*, (@rn := @rn + 1) as seqnum, 
      (999999 - 100000) as range 
     from mytable t 
     -- order by rand() 
    ) t;