mysql - 更新具有随机唯一数字的 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
没有语法错误出现,但没有改变任何行,不知道为什么。
解决方案
你可以这样做:
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
使用适当的过滤条件重复。
推荐阅读
- javascript - 如何在反应功能钩子中制作按钮组件,它可以接受输入以及加/减按钮值
- java - 如何在 Java 中创建模拟电子邮件服务?
- laravel - 最后一个下拉菜单 - 导航栏堆叠时链接敏感区域减少
- c++ - c++字符串构造为char数组
- python - 如何从图像中的一组轮廓中找到极值点
- powerapps - 如何在 powerapps 的公式栏中组合两个公式?
- java - 使用 Chaquopy 将多个列表从 Python 返回到 Java
- docker - gulp 未在 Dockerfile 中运行:在 / 中找不到本地 gulp
- php - 变量定义导致 wordpress 忽略布局/样式
- html - “输入绝对”不会像“div absolute”那样从左到右增长?