UPDATE 查询中的 MySQL IF 语句

标签 mysql if-statement

为什么我不能像这样使用 IF

UPDATE my_users
    IF(position2 = 18, "SET position = 17", ''),
    IF(position2 = 17, "SET position = 16", ''),
    IF(position2 = 16, "SET position = 15", ''),
        WHERE user_id => 170 AND user_id <= 1000

唯一有用的是

UPDATE my_users
    SET position2 = IF(position2 = 18, 17, 
                      IF(position2 = 17, 16, 
                        IF(position2 = 16, 15, ''
                      )
                        )
                          )
        WHERE user_id => 170 AND user_id <= 1000

有没有办法以任何其他方式制作相同的东西,因为我有超过 40 个条件用于该字段位置 2 并且以这种方式很容易迷路?

编辑:

如果我跑

UPDATE my_users
    SET position2 = CASE position2  WHEN 18 THEN 17
                    WHEN 17 THEN 16
                    WHEN 16 THEN 15
                    END
            WHERE user_id => 170 AND user_id <= 1000

position2 是任何不在 CASE 语句中的东西时,它会将其设置为空,我怎样才能保持 CASE 语句中的值以外的任何值相同

编辑 2: 我猜解决方案是:

   UPDATE my_users
        SET position2 = CASE position2  WHEN 18 THEN 17
                        WHEN 17 THEN 16
                        WHEN 16 THEN 15
                            ELSE position2
                        END
                WHERE user_id => 170 AND user_id <= 1000

编辑 3: 如果我的请求不是一次性的,那么更快的请求会像 Vatev 所建议的那样

   UPDATE my_users
        SET position2 = CASE position2  WHEN 18 THEN 17
                        WHEN 17 THEN 16
                        WHEN 16 THEN 15
                        END
                WHERE user_id => 170 AND user_id <= 1000
                AND position2 >= 16 and <= 18

最佳答案

你也可以这样做:

                UPDATE my_users
                     SET position2 = CASE WHEN position2 =18 THEN 17
                        WHEN position2 =17 THEN 16
                        WHEN position2 =16 THEN 15 ELSE position2 
                        END
                WHERE user_id between 170 AND  1000
                AND position2 between 16 and  18

关于UPDATE 查询中的 MySQL IF 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11697045/

相关文章:

mysql - 如何每5分钟自动备份一次mysql数据库

MySQL 最大值

mysql - 在 zend frame work 2 中选择一个带有虚拟值的虚拟列

使用ajax的php-mysql登录系统

php - 如何为以下内容指定 mysql 级联规则

c - "case"中的 if、else-if 和 else 语句用于 switch-case-break 语句?

c - 如果有条件,多行的良好C编码样式

javascript - 展开和折叠 div

Excel-需要忽略 "±",有时在较大的函数中需要忽略 "°"

C - 打印素数列表(递归)