2016-07-22 9 views
1

Ich möchte eine SQL-Anweisung erstellen, um alle meine Daten aus einer Tabelle auszuwählen (ca. 5000 Einträge) und jeder Zeile eine eindeutige Zufallszahl (zwischen 100000 und 999999) zuzuweisen.Abfrage mit eindeutiger Zufallszahl auswählen

Wie kann ich sicherstellen, dass jede Zufallszahl eindeutig ist?

Wenn ich versuche, so etwas wie

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

und Kontrolle (z in Excel), zumindest einen Teil RanNum Duplikate sind. Wie kann ich dies in einer Abfrage verhindern?

Danke!

Antwort

1

Ich denke, der einzige "einfache" Weg, dies in einer einzigen Abfrage zu tun ist, den Bereich zu partitionieren und eine Zahl pro Bereich zu erzeugen. Etwas wie dieses:

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;