2015-12-08 84 views
0

我有一個表4列說添加到SQL表中的隨機數

----------------------- 
|data1|data2|data3|key| 
----------------------- 
|d1 | d2 | d3 | k1| 
----------------------- 
|d3 |d4 | d5 | k2| 
----------------------- 
|d6 | d7 | d8 | k1| 
----------------------- 
|d9 |d10 | d11 | k2| 
----------------------- 

我需要在此基礎上用一個ID +相同的列生成一個新表。 Id應該是隨機的int64。相同的密鑰應該有相同的ID 例如,對於上面的表格則可能是:

---------------------------- 
|data1|data2|data3|key| id | 
---------------------------- 
|d1 | d2 | d3 | k1|1234| 
--------------------------- 
|d3 |d4 | d5 | k2|5678| 
---------------------------- 
|d6 | d7 | d8 | k1|1234| 
---------------------------- 
|d9 |d10 | d11 | k2|5678| 
---------------------------- 

我心底很高興得到建議

UPD

GUID爲128bit,我需要64位。我支持IRAND

+0

您正在使用哪個數據庫管理系統?也許它支持IRAND或RAND? – jarlh

+0

它是一個關鍵(它意味着唯一性),還是它是隨機的(這意味着它可能會重複?)您能否給我們一點背景知道爲什麼要這樣做,以及爲什麼像GUID或哈希這樣的東西不是更合適? (是的,正如@jarlh所說,當做這種不尋常的事情時,您可能需要特定RDBMS的自定義功能,那麼您使用的是什麼系統?) –

+0

@jalh,@ Matt Gibson請參閱有問題 – Yakov

回答

0

試試這個, 它會給一個隨機數。 您可以使用concat作爲您的解決方案。

select ABS(CHECKSUM(NewId())) 
0

快速和骯髒的:

SELECT S.*, I.`id` 
FROM `Table1` AS S 
    INNER JOIN (
     SELECT `key`, ROUND((POW(2,63)-1) * RAND()) AS id 
     FROM 
     (SELECT DISTINCT `key` 
     FROM `Table1`) AS lKeys 
    ) AS I ON S.`key` = I.`key`