SQL将列中的所有行设置为其他列的倍数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL将列中的所有行设置为其他列的倍数相关的知识,希望对你有一定的参考价值。
我需要在表用户的所有行中设置所有列exp_perkPoints
,作为列exp_level
的相应值的倍数。
我为表中的所有302行创建了此代码,但是我收到此错误:#1064 - 在第1行中'DECLARE a number(3)'旁边的语法出错了
DECLARE
a number(3);
@b number(3);
BEGIN
FOR a in 1 .. 302 LOOP
SELECT @b = `exp_level`
FROM `users`
WHERE `userid` = a;
UPDATE `users` SET `exp_perkPoints`=@b*2;
END LOOP;
END;
/
我的预期结果是每个用户的exp_perkPoints设置为2 * exp_level。
编辑:我也尝试使用以下mariadb语法,但没有成功:
BEGIN
DECLARE v1 INT DEFAULT 302;
DECLARE v2 INT DEFAULT 0;
WHILE v1 > 0 DO
SELECT exp_level INTO v2
FROM users
WHERE userid = v1;
UPDATE users
SET exp_perkPoints = v2 * 2
WHERE userid = v1;
SET v1 = v1 - 1;
END WHILE;
END
样本数据:
表:用户
列:userid,exp_level,exp_perkPoints
1 | 12 |空
2 | 1 |空
等等
期望的结果:对于等于1的用户ID,取其exp_level,将其exp_perkPoints设置为exp_level * 2.对所有用户ID重复。
答案
使用数据库时,必须在集合中思考,而不是逐个处理行,这是循环的操作方式。基于集合的解决方案在数据库中表现更好,代码简洁。
对于此问题,在users表中的exp_perkPoints列上执行更新如下所示:
update users
set exp_perkPoints = exp_level * 2;
以上是关于SQL将列中的所有行设置为其他列的倍数的主要内容,如果未能解决你的问题,请参考以下文章
为什么我的Python脚本将Postgres表的所有行设置为相同的值?