首页 > 解决方案 > 更新具有随机唯一数字的 SQL 表

问题描述

嗨,我在使用 SQL UPDATE 时遇到问题。我想在表格草稿中插入从 0-2 到列草稿的随机唯一数字(其中列大厅为 1)。

我有这个,但它以错误结尾:#1093 - 您不能在 FROM 子句中指定目标表“草稿”进行更新

UPDATE draft 
SET draft = (
  SELECT FLOOR(RAND() * 3) AS random_num 
  WHERE "random_num" NOT IN (
    SELECT draft FROM draft
  )
) 
WHERE lobby = 1

RAND 范围将在应用程序级别动态生成,因此结果应如下所示:3 条记录 = 唯一随机 0-2、9 条记录 = 0-8 中的唯一数字等。

开始

ID DRAFT LOBBY
1  null  1
2  null  1
3  null  1

结果

ID DRAFT LOBBY
1  1     1
2  2     1
3  0     1

请问有什么帮助吗?

编辑

我将查询更新为:

UPDATE draft 
SET draft = (
  SELECT FLOOR(RAND() * 3) AS random_num 
  WHERE "random_num" NOT IN (SELECT draft FROM (SELECT * FROM draft) AS temp)
) 
WHERE lobby = 1

没有语法错误出现,但没有改变任何行,不知道为什么。

标签: mysqlsqlrandom

解决方案


你可以这样做:

update draft d cross join
       (select n.*
        from (select 0 as n union all select 1 as n union all select 2) n
        where n.n not in (select d2.draft from draft d2)
        order by rand()
        limit 1
       ) n
    set d.random_number = n.n
    where d.lobby = 1
    limit 1;

注意limit 1. 这允许您一次更新一行。如果多行满足条件,则应update使用适当的过滤条件重复。


推荐阅读