1. ホーム
  2. mysql

INSERT INTO ... ON DUPLICATE KEY UPDATE 複数アイテムの場合

2023-10-22 22:56:52

質問

次のようなことをしたいのですが

INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key2','value') 
ON DUPLICATE KEY UPDATE 
t.c = 'value';
INSERT INTO t (t.a, t.b, t.c) 
VALUES ('key1','key3','value2') 
ON DUPLICATE KEY UPDATE 
t.c = 'value2';

t.a と t.b はキーです。これはすべてうまくいくのですが、2回目の挿入でエラーになります。phpMyAdminでは、このようなクエリは正常に動作しますが、そのクエリからの結果をコメントとして出力しているので、クエリを独立して実行しているのでしょうか?

このようなものも良いですが、私は各項目に対して異なる値を持つ必要があります。私はこれを好むが、私は各値の更新時に値を変更する方法がわからない。

INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key2','value'), ('key1','key3','value2')
ON DUPLICATE KEY UPDATE
t.c = ???

問題はクエスチョンマークにあります。各挿入/更新が正しい値を持つようにするには、そこに何を置けばよいのでしょうか?もちろん、そこに値を入れれば、すべてのフィールドがその値を取得します。

もし、2つのキーを持つ複数のフィールドに対して、quot; update if exists, otherwise insert" クエリを実行する他の方法があれば、私も他のアイデアを得たいのです。私は各クエリを別々に実行することができると思いますが (phpMyAdmin のように?)、それは多くのクエリになるので、私は本当にそれを避けたいと思います。

どのように解決するのですか?

VALUES()関数を使用する

INSERT INTO t (t.a, t.b, t.c)
VALUES ('key1','key2','value'), ('key1','key3','value2')
ON DUPLICATE KEY UPDATE
t.c = VALUES(t.c)

見る http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html