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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQL

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

Q&A

1回答

347閲覧

【SQL構文】指定された複数のuuidの行に対して、非明示的に値を更新したい。(一つのクエリ文で。)

shin_shin

総合スコア96

MySQL

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQL

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

0グッド

0クリップ

投稿2022/09/30 16:11

編集2022/10/01 02:29

下記のようなテーブルに対して、数時間ごとに(=定期実行で)あるuuidの行が選ばれて「xとyの値を更新する」、クエリを作成しています。

イメージ説明

ただし、「更新したいuuidが複数ある + どのuuidの行に対して更新されるのかが明示的に示されるわけではない」ため、下記のCASE文のように個別具体的に更新したuuidを指定できない、という課題がございます。(下記のSQL文は、上記の意図の部分を抜粋したもの)

SQL

1SET x = 2 CASE 3 WHEN uuid = '80c1b' THEN 1 4      WHEN uuid = '975aa' THEN 3 5

やりたいことは(=表現したいクエリは)、下記のコードイメージのように「一つのクエリ文で、更新したい当該uuid行に対して、値をそれぞれ一度で更新したい。」というものなのですが、どのように書けば良いのか?ご教示いただけますでしょうか?

python

1uuid_chosen = ["80c1b", "975aa"] # 仮に、random.choice()の結果、0行目と2行目が選ばれたとする 2x_updated = [1, 3] # 0行目と2行目で、それぞれ、xが更新される値 3y_updated = [4, 6] # 0行目と2行目で、それぞれ、yが更新される値 4 5query = f""" 6 UPDATE table_name 7 SET x={x_updated}, y={y_updated} 8 WHERE uuids={uuid_chosen} 9"""

私の方でも一通り調べましたが、下記URLの回答のように、CASE文で明示的に変更したい値を指定する、という場面のケースしか見当たらず、途方に暮れております。。。
https://stackoverflow.com/questions/25674737/update-multiple-rows-with-different-values-in-one-query-in-mysql

面倒な質問で恐縮でございますが、何卒ご教示のほど、よろしくお願いいたします。

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

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

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

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

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

maisumakun

2022/09/30 22:21

やりたいことは、「一回のトランザクション」と「一つのクエリ文」のどちらが正しいのでしょうか。
shin_shin

2022/10/01 02:28

すみません、一つのクエリ文です。
guest

回答1

0

以下のようなクエリで実現できるかと思います。

SQL

1UPDATE table_name AS A 2JOIN ( 3 SELECT '80c1b' AS uuid, 1 AS x, 4 AS y 4 UNION ALL SELECT '975aa' AS uuid, 3 AS x, 6 AS y 5) B ON A.uuid = B.uuid 6SET A.x = B.x, A.y = B.y;

投稿2022/10/01 08:41

neko_the_shadow

総合スコア2230

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問