【问题标题】:Getting syntax error during CASE WHEN query in MySQL在 MySQL 中的 CASE WHEN 查询期间出现语法错误
【发布时间】:2017-11-22 12:01:51
【问题描述】:

我正在尝试在小型 MYSQL 查询下运行以创建表。

这是 MYSQL 查询:

CREATE TABLE SAMPLE_TEST (
  ID BIGINT ,
  TYPE INTEGER NOT NULL,
  TYPE2 GENERATED ALWAYS AS (CASE WHEN TYPE = 0 THEN ID ELSE TYPE END),
  PRIMARY KEY (ID)
  );

运行上述查询后,我收到以下错误

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GENERATED ALWAYS AS (CASE WHEN TYPE = 0 THEN ID ELSE TYPE END),
  PRIMARY KEY (I' at line 4

我在DB2 数据库中使用GENERATED ALWAYS AS,我已从SQL syntax error 'GENERATED ALWAYS AS IDENTITY' 更改为auto_increment?

现在我想知道CASE WHEN 是否存在于 MySQL 或 MySQL 的任何替代品中?有什么帮助或建议吗?

【问题讨论】:

    标签: mysql jboss db2


    【解决方案1】:

    在使用 GENERATED ALWAYS 之前使用数据类型。 您可以将以下代码与所需的数据类型一起使用。

    CREATE TABLE SAMPLE_TEST (
        ID BIGINT,
        TYPE INTEGER NOT NULL,
        TYPE2 DOUBLE GENERATED ALWAYS AS
            (CASE WHEN `TYPE` = 0 THEN `ID` ELSE `TYPE` END),
        PRIMARY KEY (ID)
    )
    

    Demo

    【讨论】:

      【解决方案2】:

      根据 MySQL 文档,您需要遵循以下语法

      col_name data_type [GENERATED ALWAYS] AS(表达式)

      所以,

      TYPE2 INTEGER GENERATED ALWAYS AS (CASE WHEN TYPE = 0 THEN ID ELSE TYPE END) should work
      

      参考:https://dev.mysql.com/doc/refman/5.7/en/create-table-generated-columns.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-23
        • 2017-11-09
        • 2021-09-13
        • 2020-09-22
        • 1970-01-01
        相关资源
        最近更新 更多