Mysql 5.7在GENERATED列中使用IF THEN或CASE WHEN

时间:2019-07-03 09:45:43

标签: mysql

我正在寻找一种在条件下在Mysql数据库https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html中创建虚拟列的方法。

想法是这样的:

CREATE TABLE `Contact` 
(`id` BIGINT NOT NULL AUTO_INCREMENT, 
`companyName` VARCHAR(255),
`firstName` VARCHAR(255),
`lastName` VARCHAR(255),
`fullName` VARCHAR(255) AS (IF personType='LEGAL_PERSON' THEN `companyName` ELSE CONCAT(lastName,' ',firstName) END IF) VIRTUAL,
`personType` VARCHAR(30) DEFAULT 'NATURAL_PERSON' NOT NULL);

在虚拟列中没有找到使用条件的示例。那可能吗?有其他提示可以做到这一点的提示吗?

1 个答案:

答案 0 :(得分:2)

当然可以。只是IF应该是一个函数,而不是关键字,因此语法与here中所建议的不同。试试:

CREATE TABLE `Contact` (
    `id` BIGINT NOT NULL AUTO_INCREMENT,
    `companyName` VARCHAR(255),
    `firstName` VARCHAR(255),
    `lastName` VARCHAR(255),
    `fullName` VARCHAR(255) AS (
        IF(
            personType = 'LEGAL_PERSON', -- condition
            `companyName`, -- value if true
            CONCAT(lastName, ' ', firstName) -- value if false
            )
        ) VIRTUAL,
    `personType` VARCHAR(30) DEFAULT 'NATURAL_PERSON' NOT NULL
);