1

とても簡単ですが、答えが見つかりませんでした。組み合わせが存在する場合は、UPDATE、それ以外の場合はINSERT。

IF EXISTS(SELECT customer_id FROM payment_conditions WHERE customer_id = 2 AND shipping_company_id = 1) 

THEN
UPDATE payment_conditions SET payment_condition = "pay in full" WHERE customer_id = 2  AND shipping_company_id = 1;

ELSE
INSERT INTO payment_conditions customer_id, shipping_company_id, payment_condition, active VALUES (2,1,"some value",1);


END IF
4

5 に答える 5

2

(shipping_company_id、customer_id)に一意のキーがある場合は、次を使用できます。

INSERT INTO payment_conditions 
SET customer_id = 2,
  shipping_company_id = 1,
  payment_condition = 'some value',
  active = 1
ON DUPLICATE KEY UPDATE payment_condition = 'pay in full'
于 2012-07-19T10:21:18.253 に答える
2

使用できるように、外部キーに設定customer_idして設定する必要がありますshipping_company_id

INSERT INTO payment_conditions
    customer_id, shipping_company_id, payment_condition, active
VALUES (2, 1, "some value", 1)
ON DUPLICATE KEY UPDATE payment_condition = "pay in full"
于 2012-07-19T10:21:46.843 に答える
1
INSERT INTO payment_conditions (customer_id, shipping_company_id, payment_condition, active) 
VALUES (2,1,"some value",1)
ON DUPLICATE KEY UPDATE payment_condition = "pay in full"
于 2012-07-19T10:21:19.713 に答える
1

または、2つのステートメントを発行し(最初にUPDATEを使用するNB)、条件付きロジックを廃止します。行が存在しない場合、UPDATEは効果がありません。これは、キーがcustomer_id+shipping_companyと異なる場合に機能するはずです。

UPDATE payment_conditions SET payment_condition = "pay in full" 
WHERE customer_id = 2  AND shipping_company_id = 1;

それから

INSERT INTO payment_conditions 
(customer_id
, shipping_company_id
, payment_condition
, active) 
VALUES (2,1,"some value",1)
where not exists 
(select * FROM payment_conditions 
   WHERE customer_id = 2 AND shipping_company_id = 1);
于 2012-07-19T10:25:17.957 に答える
0

SQLServerでmergeステートメントを使用します-これらの回答はMySQL構文を暗示しているようです。データベースのフレーバーについては述べていませんが、SQLServerでこれを行うにはMergeが推奨される方法です。

于 2012-07-19T13:52:37.157 に答える