我有一个包含4列的表
-----------------------
|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是128位,我需要64位。我支持IRAND
答案 0 :(得分:0)
试试这个,
它会给出一个随机数。
您可以使用concat
作为解决方案。
select ABS(CHECKSUM(NewId()))
答案 1 :(得分: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`