0

私はこのようなことをしたい:

CREATE TRIGGER addwinner AFTER INSERT ON bids
FOR EACH ROW BEGIN 
IF exists(select * from wins as LT where LT.item_index=NEW.item_index) THEN

SELECT item_index, MIN( bid_amount ) 
FROM update_winnerslist AS a1
WHERE a1.item_index =  NEW.item_index;
UPDATE wins SET email_id=NEW.emai_id, bid_amount=a1.bid_amount where wins.item_index=a1.item_index;

END IF;
END;

基本的に私が欲しいのは、特定の属性を比較することによって、別のテーブルのタプルを使用してテーブルを更新することです。

4

1 に答える 1

0

マニュアルで説明されているように、手順/トリガーなどを定義するとき。本体内でコマンドを区切るために使用する場合、コマンドが単一のステートメントとして解釈されるよう;に、代替の区切り文字を定義する必要があります。CREATE

あなたが説明するようUPDATEに、の結果を使ってSELECT、あなたは次のいずれかを行うことができます:

  1. SELECTの結果を変数に保存し、それをUPDATE:で使用します。

    DELIMITER ;; -- or anything else you like
    
    CREATE TRIGGER addwinner AFTER INSERT ON bids FOR EACH ROW
      IF EXISTS (SELECT * FROM wins AS LT WHERE LT.item_index=NEW.item_index)
      THEN
        SELECT MIN(bid_amount) INTO @bid_amount
        FROM   update_winnerslist AS a1
        WHERE  a1.item_index = NEW.item_index;
    
        UPDATE wins
        SET    email_id=NEW.emai_id, bid_amount=@bid_amount
        WHERE  wins.item_index=a1.item_index;
      END IF;;  -- whatever command delimiter you chose above goes here
    
    DELIMITER ; -- reset to normal
    
  2. サブクエリを使用するだけです(更新するテーブルを参照しない限り):

    DELIMITER ;; -- or anything else you like
    
    CREATE TRIGGER addwinner AFTER INSERT ON bids FOR EACH ROW
      IF EXISTS (SELECT * FROM wins AS LT WHERE LT.item_index=NEW.item_index)
      THEN
        UPDATE wins
        SET    wins.email_id=NEW.emai_id, wins.bid_amount=(
          SELECT MIN(bid_amount)
          FROM update_winnerslist AS a1
          WHERE a1.item_index = NEW.item_index
        )
        WHERE  item_index = NEW.item_index
      END IF;;  -- whatever command delimiter you chose above goes here
    
    DELIMITER ; -- reset to normal
    
  3. または、テーブルを結合するだけです。

    DELIMITER ;; -- or anything else you like
    
    CREATE TRIGGER addwinner AFTER INSERT ON bids FOR EACH ROW
      IF EXISTS (SELECT * FROM wins AS LT WHERE LT.item_index=NEW.item_index)
      THEN
        UPDATE wins JOIN update_winnerslist AS a1 USING (item_index)
        SET    wins.email_id=NEW.emai_id, wins.bid_amount=MIN(a1.bid_amount);
        WHERE  item_index = NEW.item_index
      END IF;;  -- whatever command delimiter you chose above goes here
    
    DELIMITER ; -- reset to normal
    
于 2012-04-25T21:54:27.617 に答える