質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

1322閲覧

MySQL TRIGGER の ON DUPLICATE KEY UPDATE 時の CACE分岐

tajix_japan

総合スコア132

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2020/01/13 06:01

編集2020/01/13 06:19

mysqlで下記のテーブル(table_a table_b)を作りました。

table_a (name , category)
table_b (name , category , category2)
→ table_bのnameはunique key です。

【1】
table_aに下記のようなcsvファイルをインフレートします。

name    category
松田聖子  歌手
郷ひろみ  歌手
小泉今日子 歌手
松田聖子  歌手
郷ひろみ  歌手
小泉今日子 歌手
松田聖子  女優
山口百恵  歌手
小泉今日子 女優

【2】
table_aからtable_bにインサートするようなトリガを作ります。

【Triggerの仕様】
nameはユニークキー。
catrgoryがダブっている場合は無視、カテゴリーに新規文字を見つけた場合は、
catrgoryではなく、category2に書き込む。

【3】
求めたい結果は下記のとおりです。

name    category category2 
松田聖子   歌手   女優
郷ひろみ   歌手
小泉今日子  歌手   女優
山口百恵   歌手

【行ったこと】

下記のトリガを作りました。

mysql

1 2 3DELIMITER // 4CREATE TRIGGER table_a 5AFTER INSERT ON table_a 6FOR EACH ROW BEGIN 7INSERT INTO `table_b` SET `table_b`.`name`=NEW.`name`,`table_b`.`category`=NEW.category 8ON DUPLICATE KEY UPDATE 9`table_b`.`category2` = (CASE WHEN `table_b`.`category` != NEW.category THEN `table_b`.`category2` ELSE values(NEW.category) END); 10 END; 11// 12DELIMITER ; 13

結果

トリガーが機能していません。
(table_aにもtable_b にもインサート出来ません)

エラーは下記のとおりです。

#1054 '' columnは'values() function' にはありません

どのようなトリガを作れば、希望のテーブルBを作ることができるのでしょうか?
CASE文では厳しいようであれば、IF文でも構いません。
ご指導いただけますようよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

下記で自己解決しました。
お騒がせいたしました。

DELIMITER //
CREATE TRIGGER table_a
AFTER INSERT ON table_a
FOR EACH ROW BEGIN
INSERT INTO table_b SET table_b.name=NEW.name,table_b.category=NEW.category
ON DUPLICATE KEY UPDATE
table_b.category2 = (CASE WHEN table_b.category != NEW.category THEN NEW.category ELSE values(category2) END);
END;
//
DELIMITER ;

投稿2020/01/13 12:40

tajix_japan

総合スコア132

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問