4

Insert... On Conflict ステートメントで同じ値を使用する場合、構文を単純化できますか?

INSERT INTO cars 
  (car_id, car_type, car_model) 
values
  (1, 'tesla', 'model s')
ON CONFLICT (car_id) DO UPDATE SET 
  car_type = 'tesla',
  car_model = 'model s';

この種のステートメントは、アプリケーションの更新ごとに実行されるスクリプトの一部であるため、他にもたくさんあります。

基本的に、同じ値を 2 回指定しない方法を探しています。

4

1 に答える 1

11

excluded次のキーワードを使用します。

INSERT INTO cars 
  (car_id, car_type, car_model) 
values
  (1, 'tesla', 'model s')
ON CONFLICT (car_id) DO UPDATE SET 
  car_type = excluded.car_type,
  car_model = excluded.car_model;

これは、複数の行でも正しく機能します。たとえば、次のようになります。

INSERT INTO cars 
  (car_id, car_type, car_model) 
values
  (1, 'tesla', 'model s'), 
  (2, 'toyota', 'prius')
ON CONFLICT (car_id) DO UPDATE SET 
  car_type = excluded.car_type,
  car_model = excluded.car_model;
于 2016-10-06T09:57:35.680 に答える