36016


他の方が書いたSQLで以下のようなコードがありました。

* * *
[code]

    CREATE TABLE tel(
        tel     varchar(20) NOT NULL,
        upd_date    datetime    NULL ,
        error_date  datetime    NULL ,
        status      ENUM('チェック済み','確認','エラー') AS (
            CASE
                WHEN error_date   IS NOT NULL THEN 3
                WHEN upd_date IS NOT NULL THEN 1
                ELSE 2
            END CASE
        ) ST NOT NULL default 'チェック済み' ,
        PRIMARY KEY(tel)
    );
    
[/code]

* * *

upd_date、error_dateの値によってstatusにいれる値を変更したいようですが、このSQLを実行してもエラーが出て作成されませんでした。

## エラー内容

[code]

    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
    corresponds to your MariaDB server version for the right syntax to use near 'CAS
    E       ) ST NOT NULL default 'チェック済み' ,  PRIMARY KEY(tel))' at line 1
    
[/code]

* * *

CASE付近でエラーが出ているようですが何がダメなのかわかりません。  
そもそもENUMとCASEを組み合わせること自体が誤っているのでしょうか。


CC BY-SA 3.0
2017-06-30T03:41:40.473
35984
2017-07-01T05:24:14.473
2017-06-30T05:48:07.703
76
24123
question
mysql
ENUMとcaseを組み合わせたテーブル作成


CASE式の最後は`END CASE`ではなく`END`です。また、生成列は式により常に値が生成されるので、デフォルト値を指定できません。

なので、次のように記述すればいいと思います。

[code]

    CREATE TABLE tel(
        tel     varchar(20) NOT NULL,
        upd_date    datetime    NULL ,
        error_date  datetime    NULL ,
        status      ENUM('チェック済み','確認','エラー') AS (
            CASE
                WHEN error_date   IS NOT NULL THEN 3
                WHEN upd_date IS NOT NULL THEN 1
                ELSE 2
            END
        ) NOT NULL,
        PRIMARY KEY(tel)
    );
    
[/code]


CC BY-SA 3.0
2017-07-01T05:24:14.473
36016
2017-07-01T05:24:14.473
3249
35984
answer