为一组行设置相同的随机值

时间:2019-05-21 15:27:06

标签: mysql

我需要用随机值填充新列Column2

Column1中具有匹配值的所有行应具有相同的随机值。

我的方法是在第一列上执行自联接,然后将RAND()生成的值分配给Column2

UPDATE table AS t
   JOIN (SELECT DISTINCT Column1 FROM table) t1
   ON t.Column1 = t1.Column1
SET Column2 = RAND()

预期结果类似于:

Column1 | Column2
--------+--------
alpha   | 0.766 
alpha   | 0.766
beta    | 0.234

但是实际结果是:

Column1 | Column2
--------+--------
alpha   | 0.766 
alpha   | 0.329
beta    | 0.234

1 个答案:

答案 0 :(得分:1)

尝试为子查询中的每个Column1组生成随机值:

UPDATE table AS t
INNER JOIN
(
    SELECT DISTINCT Column1, RAND() rnd
    FROM table
    WHERE 1 = 1
) t1
    ON t.Column1 = t1.Column1
SET Column2 = t1.rnd;

这至少应该可以解决当前问题,即您有多个记录属于同一Column1值,并且分配了不同的Col2值。我将WHERE 1 = 1子句添加到了子查询中,以防MySQL试图变得更聪明并缓存RAND()的结果以重用它。