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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

4203閲覧

UPDATEで一部だけ条件を付けて現在値を元に更新する

Yuiti628

総合スコア71

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/06/17 09:14

編集2020/06/17 09:37

mysql Ver 8.0.19


table name

idkyoukascore
1国語10
2算数20

mysql

1UPDATE name SET kyouka = CONCAT(kyouka, '算数'),score=100 where id =1;

のようにすれば、


table name

idkyoukascore
1国語算数100
2算数20

となると思うのですが、もし既にのその文字列が含んでいたら何もしないようにしたいです。

上の状態で、上の状態でid =1 に '算数'を追加する場合は既にあるので何もしない。'社会'なら'国語算数社会'のようにはどのようにすればできるのでしょうか?
scoreは毎回更新したいです。

mysql

1 UPDATE name 2 SET kyouka = (if kyouka not like ('%社会%') then 3 CONCAT(kyouka, '社会') 4 else 5 CONCAT(kyouka, '') 6 ) 7 ,score= 8 8 where id =1

エラーは以下でした。

SQLエラー [1064] [42000]: 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 'kyouka not like ('%社会%') then CONCAT(kyouka, '社会') else CONCAT(kyou' at line 2

希望はこうしたいです

table name

idkyoukascore
1国語算数社会8
2算数20

追記
指摘をいただき、case を使ってもできないです (T . T)

UPDATE buzz.test SET kyouka = ( CASE WHEN not like ('%社会%') then CONCAT(kyouka, '社会') ELSE CONCAT(kyouka, '') END) ,score= 8 where id =1
SQLエラー [1064] [42000]: 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 'like ('%社会%') then CONCAT(kyouka, '社会') ELSE CONCAT(kyouka, '') END) ' at line 2

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

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

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

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

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

guest

回答2

0

ベストアンサー

変更したくない時は、元の値で更新するようにします。

SQL

1UPDATE buzz.test SET 2 kyouka = CASE WHEN kyouka like ('%社会%') 3 then kyouka else CONCAT(kyouka, '社会') 4 end 5, score = 8 6where id =1

投稿2020/06/17 09:52

sazi

総合スコア25327

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

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

Yuiti628

2020/06/17 10:07

できました!!! ありがとうございます。 なんだか空白が原因だったみたいなので上のでもできたかもですが
sazi

2020/06/17 10:14

質問の内容ではlikeで比較する項目が指定されていません。
guest

0

CASE を試しては?

投稿2020/06/17 09:20

Orlofsky

総合スコア16417

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問