【问题标题】:MySQL IF statement in UPDATE queryUPDATE 查询中的 MySQL IF 语句
【发布时间】:2012-07-26 16:15:37
【问题描述】:

为什么我不能像这样使用 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

【问题讨论】:

  • 看看CASE。
  • 顺便说一句,如果你想减少列,你可以SET position2 = position2-1;。
  • 我在主帖中添加的另一个问题
  • 只需添加 ELSE 子句,例如 ...ELSE position2 END。或者只用 position2-1 更新 position2 IN (16,17,18) 的那些行,这样会更好。
  • 正确的方法是将AND position2 IN (16,17,18) 添加到您的 WHERE 子句中。您也可以像这样CASE position2 WHEN .. THEN .. ELSE position2 END 放置一个“默认”案例。

标签: mysql if-statement


【解决方案1】:

你也可以这样做:

                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

【讨论】:

    【解决方案2】:

    这就是我将如何重写您的查询:

    UPDATE
      my_users
    SET 
      position2 = position2 - 1
    WHERE
      position2 >= 16
      AND position2 <= 18
      AND user_id >= 170 
      AND user_id <= 1000
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-18
      • 2020-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      相关资源
      最近更新 更多