是否可以使用MYSQL在CASE语句THEN部分中做很多事情?

时间:2019-04-28 04:52:24

标签: mysql sql

我是SQL和MYSQL的新手,正在尝试使用UPDATE语句在CASE语句中设置值。我正在尝试在THEN语句的CASE部分中做两件事,无法弄清是否是语法问题,或者无法在THEN部分中做两件事。

我已经查了这两个问题,却无法将这两个问题与我想做的事情联系起来

Multiple THEN to a single CASE statement?

update mysql with if condition

我目前的尝试

UPDATE offering, tmpTable
SET offering.offNumEnrolled = CASE WHEN offering.OffNumEnrolled = 0 
                              THEN (tmpTable.stdTotal SET aRowsAltered = aRowsAltered + 1) 
                              ELSE (offering.offNumEnrolled) END
WHERE [some condition]

为了更好地说明我要在此处完成的工作,请参见以下代码:

UPDATE offering, tmpTable
SET offering.offNumEnrolled = IF (offering.OffNumEnrolled = 0) THEN
                                    (SET TO THIS tmpTable.stdTotal AND 
                                    SET aRowsAltered = aRowsAltered + 1)
                                 ELSE
                                    SET offering.offNumEnrolled;
                                 END IF;
WHERE [some condition]

如果更改了行,设置值和增加计数器的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

我认为您想要这样的东西:

UPDATE offering o JOIN
       tmpTable tt
       ON  <join conditions here>
    SET o.offNumEnrolled = tt.stdTotal, 
        ?.aRowsAltered = ?.aRowsAltered + 1
    WHERE o.OffNumEnrolled = 0;

?aRowsAltered来自何处的表别名。在这种情况下,它可能是可选的,但通常是限定列名的一个好习惯。

注意:

  • MySQL在JOIN子句中支持UPDATE。使用它。
  • JOIN条件应该放在ON子句中。
  • 表别名使查询更易于编写和阅读。
  • 您只想更新某些行,因此o.OffNumEnrolled = 0上的条件在WHERE子句中。
  • MySQL允许您一次更新多个表,因此可以修改aRowsAltered而不管它在哪个表中。