0

レコードを2つの方法で保存したいだけです。

  1. 存在する場合は、情報を更新します
  2. 存在しない場合は、新しいレコードとして挿入されます

私のテーブルのアウトラインスキーマは次のとおりです。

product_purchase_itemには product_purchase_item_id、product_id、quantity 列があります
product_stockには product_stock_id、product_id、product_total_quantity 列があります

トリガーを作成していました

 DELIMITER //
 CREATE TRIGGER store_check AFTER INSERT ON product_purchase_item
 FOR EACH ROW
 BEGIN
  DECLARE X INTEGER;
  SET X =(SELECT product_id FROM product_stock where product_id = NEW.product_id);
  IF NEW.product_id !=X  THEN
   INSERT INTO product_stock VALUES(NULL,NEW.product_id,NEW.quantity);
  ELSE
   UPDATE product_stock 
   SET product_total_quantity=product_total_quantity+NEW.quantity
   WHERE product_id=NEW.product_id;
  END IF;
 END;//
 DELIMITER;//

問題はproduct_stockテーブルにあります。製品レコードが存在しない場合、INSERT クエリは機能しませんが、製品レコードが存在する場合、更新クエリは適切に機能します。

4

2 に答える 2

1

「機能しない」のは本当にINSERTステートメントですか?それとも、INSERT 文がまったく実行されていないという問題でしょうか。

前の SELECT クエリが行を返さない場合はどうなりますか? に割り当てられる値はX?

がその値を持っている場合X、条件テスト " foo != X" は TRUE を返しますか、それとも何か他のもの (FALSE や NULL など) を返しますか?

このようなことを試しましたか?

IF NEW.product_ID = X THEN
   UPDATE ...
ELSE
   INSERT ...    
END IF;

(質問に質問で答えるのが悪い習慣であることは知っていますが、それらに答えると本当に聞きたかった質問への答えが得られるので、それは適切だと思われました。)

于 2013-07-31T19:44:14.667 に答える