首页 > 解决方案 > MySQL:使用 IF ELSEIF 添加计算列

问题描述

我正在为 Alter Table 场景而苦苦挣扎。我有一个表“示例”,其中存在第 1 到第 3 列。我想添加一个列“目标”,它应该包含来自 column2 或 column3 的值,具体取决于 column1。我尝试了以下代码,但它在 IF 语句的第一行引发错误。错误在于 column1 引用,它需要一个左括号,但是当我将 IF 子句的条件放在括号中时,它拒绝了 THEN 函数。MySQL 8.0 请参见下面的代码。谁能帮忙?非常感谢,托马斯


ADD COLUMN
(
Destination VARCHAR(15) 
GENERATED ALWAYS AS 
    (
    IF column1 = "north" THEN
        SET destination = column2
    ELSEIF column1 = "south" THEN   
        SET destination = column3
    ELSE
        SET destination = ""
    END IF
    )
STORED
)
;

标签: mysqlddlcalculated-columns

解决方案


您可以使用DB 版本 5.7+ 中发布的 Generated Column的以下语法(包含CASE..WHEN..ELSEStatement 而不是):IF..THEN..ELSE

ALTER TABLE t1 ADD COLUMN
(
Destination VARCHAR(15) 
GENERATED ALWAYS AS 
    (
    CASE WHEN column1 = "north" THEN
           column2
         WHEN column1 = "south" THEN   
           column3    
    END 
    )
STORED
)

没有分配给派生列本身并且没有set子句。

Demo


推荐阅读