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

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

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

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

Q&A

1回答

518閲覧

SQLで登録済みのであれば一部値の更新、未登録であれば追加したい。

_Soma

総合スコア16

SQL

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

0グッド

0クリップ

投稿2021/06/13 06:47

同じ「日付、表示用日付、名前」があれば「予約時間、URL」を更新し、なければ新規追加したいです。
現状、名前のみ異なるデータを与えて動かしても、一番初めのデータしか登録されません。

どのように修正したらやりたいことが実現できるでしょうか?

pythone

1self.cursor.execute('insert into talkport (日付, 表示用日付, 名前, 予約時間, URL) values ("{0}", "{1}", "{2}", "{3}", "{4}") \ 2 ON DUPLICATE KEY UPDATE 予約時間 = VALUES(予約時間), URL = VALUES(URL)'.format(day, dispday, name, yoyaku, url))

イメージ説明

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

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

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

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

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

guest

回答1

0

INSERT ON DUPLICATE KEY UPDATEのドキュメントを見るとわかるのですが、キー重複によりUPDATEする際は、まずOR条件で検索し、該当する行が複数ある場合は、1行だけがランダムで選ばれて更新されます。

今回の要件のように、該当する行が複数ある場合、すべての行をUPDATEしたい場合は、以下のようなロジックをPython側で実装する必要があるかと思います。

  1. SELECT COUNTを使って対象の行があるかどうかを確認する
  2. 1.の結果が0件の場合 (対象の行がない場合)、INSERT文を発行する
  3. 2.の結果が0件ではない場合 (対象の行がある場合)、UPDATE文を発行する

投稿2021/06/14 12:50

neko_the_shadow

総合スコア2349

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問