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;

结果如下: enter image description here

以上是关于SQL将列中的所有行设置为其他列的倍数的主要内容,如果未能解决你的问题,请参考以下文章

SQL:将列中的 Unicode 数据更新为重音字符

将列中的 SQL 数据转换为数组

是否需要根据表中的唯一值将列分解为多个列?

为什么我的Python脚本将Postgres表的所有行设置为相同的值?

我应该如何将列中的所有数据加载到 datagridview 组合框?

SQL Server,将列中的所有值与另一个值的一些值连接起来