1. ホーム
  2. mysql

[解決済み] MySQLの条件付き挿入

2022-10-29 21:49:50

質問

条件付きINSERTを作成するのに苦労しています。

私はインスタンスIDがユニークである列(インスタンス、ユーザー、アイテム)を持つx_tableを持っています。私は、ユーザーがすでに与えられたアイテムを持っていない場合にのみ、新しい行を挿入したいのです。

例えば、instance=919191 user=123 item=456を挿入しようとしている場合。

Insert into x_table (instance, user, item) values (919191, 123, 456) 
    ONLY IF there are no rows where user=123 and item=456 

何かお手伝いや正しい方向へのご指導があれば、とてもありがたいです。

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

DBMSが、挿入を実行する際にどのテーブルから選択するかについて制限を課していない場合、試してみてください。

INSERT INTO x_table(instance, user, item) 
    SELECT 919191, 123, 456
        FROM dual
        WHERE NOT EXISTS (SELECT * FROM x_table
                             WHERE user = 123 
                               AND item = 456)

この中で dual は一行だけのテーブルです (元々は Oracle で見つかり、現在は mysql でも見つかっています)。 ロジックは、SELECT ステートメントが、必要な値を持つ 1 行のデータを生成し、その値がまだ見つかっていない場合にのみ、そのデータを生成することです。

あるいは、MERGE ステートメントを見てください。