Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我如何在mysql中的update…set中使用case和if语句?_Mysql - Fatal编程技术网

我如何在mysql中的update…set中使用case和if语句?

我如何在mysql中的update…set中使用case和if语句?,mysql,Mysql,这就是我想做的: UPDATE my_table SET column_a = ( SELECT CASE WHEN column_a is null THEN 20 WHEN column_a < 10 THEN column_a WHEN column_a = 10 THEN 20 ELSE MIN((column_a, 20))

这就是我想做的:

UPDATE
    my_table
SET
    column_a = (
        SELECT
        CASE
            WHEN column_a is null THEN 20
            WHEN column_a < 10 THEN column_a
            WHEN column_a = 10 THEN 20
            ELSE MIN((column_a, 20))
        END
        INTO @var_a
        /* I want to do an if...else now */
        IF(var_a > UNIX_TIMESTAMP(), null, var_a)
    )
WHERE
    column_b = 'something'
更新
我的桌子
设置
列_a=(
挑选
案例
当列_a为空时,则为20
当列_a<10时,则列_a
当列_a=10时,则为20
ELSE最小值((a列,20))
结束
进入@var_a
/*我现在想做一个if…else*/
IF(var_a>UNIX_TIMESTAMP(),null,var_a)
)
哪里
列_b='something'

我该怎么做这样的事?谢谢

我认为您可以使用嵌套的
案例来执行此操作:

UPDATE
    my_table
SET
    column_a = (
        case
            when (@var_a := (
                case 
                    when column_a is null then 20
                    when column_a < 10 then column_a
                    when column_a = 10 then 20
                    else least(column_a, 20)
                end)) <= unix_timestamp() then @var_a
            else null
        end)
WHERE
    column_b = 'something';
更新
我的桌子
设置
列_a=(
案例
当(@var_a:=(
案例
当列_a为空时,则为20
当列_a<10时,则列_a
当列_a=10时,则为20
除此之外(第a列,第20列)

通过
MIN(column_a,20)
,你的意思是取最小值吗?@MichaelBerkowski Yes和
什么表达式是
一些带有变量a的表达式?所有这些都应该在
案例中单独表达。@MichaelBerkowski这是使用变量a的另一个比较。我这样做:
var\u a>UNIX\u TIMESTAMP()
如果你发现自己就你的问题向某人提出了20个问题,这意味着你在解释你的问题方面做得很差,你应该把你的问题解释得更清楚。我会尝试一下,谢谢!是的,我知道MIN,我忘了包括一组括号。我在问题中输入的值例如,它们实际上是时间戳,与UNIX_TIMESTAMP()比较接近。