MySQL:使用列表中的随机数更新所有行

mwa*_*afi 3 mysql sql

我需要运行一个SQL查询,从列表中选择一个随机数并用它更新一个特定的列.

数字列表:

(101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122)

兰德表:(结构)

id  rand    type
1    0       false
2    0       true
3    0       false
4    0       true
5    0       true
Run Code Online (Sandbox Code Playgroud)

我需要从列表中选择随机数并更新"rand"列,

Ale*_*exL 7

试试这个:

UPDATE `rand` SET `rand` = (SELECT val FROM (
    SELECT 101 AS val
    UNION ALL SELECT 102
    UNION ALL SELECT 103
    UNION ALL SELECT 104
    UNION ALL SELECT 105
    UNION ALL SELECT 106
    UNION ALL SELECT 107
    UNION ALL SELECT 108
    UNION ALL SELECT 109
    UNION ALL SELECT 110
    UNION ALL SELECT 111
    UNION ALL SELECT 112
    UNION ALL SELECT 113
    UNION ALL SELECT 114
    UNION ALL SELECT 115
    UNION ALL SELECT 116
    UNION ALL SELECT 118
    UNION ALL SELECT 119
    UNION ALL SELECT 120
    UNION ALL SELECT 121
    UNION ALL SELECT 122
) AS vals ORDER BY RAND() LIMIT 1)

它将rand在每次执行时使用列表中的随机值更新列

如果数字列表来自预定义表,您可以这样做:

UPDATE `rand` SET `rand` = (SELECT `number` FROM `number_table` ORDER BY RAND() LIMIT 1)


jpw*_*jpw 7

如果数字不是来自另一个表,但你只需要101到122之间的任意随机数,那么我认为这应该有效:

UPDATE `rand` SET `rand` = FLOOR(RAND() * (22)) + 101

-- or written with the formula below.
UPDATE `rand` SET `rand` = FLOOR(101 + RAND() * (123-101))
Run Code Online (Sandbox Code Playgroud)

从MySQL文档:

为了获得范围i <= R <j的随机整数R,使用表达式FLOOR(i + RAND()*(j-i)).

示例SQL小提琴