2016-07-22 5 views
1

テーブルからすべてのデータを選択し(約5000エントリ)、各行に一意の乱数(100000〜999999)を割り当てるSQL文を作成したいと考えています。一意の乱数を使用したクエリの選択

どのように各乱数が一意であることを確認できますか?

私は

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

のようなものを試してみて、(Excelで例えば)をチェックした場合、少なくともいくつかのRanNumが重複しています。これをどのようにしてクエリで防ぐことができますか?

ありがとうございます!

答えて

1

単一のクエリでこれを行う唯一の「簡単な」方法は、範囲を分割して範囲ごとに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; 
関連する問題