2016-12-05 6 views
0

AFTER INSERTトリガーを使用して、1つのデータベースのテーブルから最近更新された行の情報を取得し、別のデータベースのテーブルに格納します。しかし、私はテーブルが複合キー(ClubID、CourtID)を持つように最後に挿入された行を取得する方法はわかりませんし、それらのどれもが自動インクリメント列ではありません。 トリガーのコードは次のとおりです。自動増分列を使用しないでテーブルに最後に挿入された行にアクセスする方法はありますか?

DELIMITER // 
DROP TRIGGER if exists insert_court // 
CREATE TRIGGER insert_court AFTER INSERT ON suchwow.Court 
FOR EACH ROW 
BEGIN 
    DECLARE ckey2 INT; 
    DECLARE ckey1 INT; 
    DECLARE ckey3 INT; 
    SELECT MAX(CourtKey) INTO @ckey2 from suchwow_analytical.Court; 
    SELECT NEW.CourtID,NEW.ClubID INTO @ckey1,@ckey3 from suchwow.Court; 
    INSERT INTO suchwow_analytical.Court(CourtKey,CourtID,FloorType, 
    HourlyRate, ClubID,Street,City,State,Zipcode) 
    SELECT @ckey2+1,@ckey1,FloorType,HourlyRate,@ckey3,Street 
    ,City,State,Zipcode from suchwow.Court c,suchwow.Club cl where c.clubID=cl.ClubID 
    and CourtID=ckey1 and cl.ClubID=ckey3; 
END // 
DELIMITER ; 

#1172が複数の行エラーを返しています。私はNEW.CourtIDとNEW.ClubIDがそれの理由だと確信していますが、この問題を解決する方法は考えていません。それがどのように解決できるかについていくつかの洞察を投げかけると大きな助けになるでしょう。

お時間をいただきありがとうございます。

答えて

0

@ ckey1、@ ckey3を削除し、new.ClubIDとnew.CourtIDを使用して直接問題を解決しました。ここに私の質問の解決策があります。

DELIMITER // 
DROP TRIGGER if exists insert_court // 
CREATE TRIGGER insert_court AFTER INSERT ON suchwow.Court 
FOR EACH ROW 
BEGIN 
    DECLARE ckey2 INT; 
    SELECT MAX(CourtKey) INTO @ckey2 from suchwow_analytical.Court; 
    INSERT INTO suchwow_analytical.Court(CourtKey,CourtID,FloorType,HourlyRate,ClubID, 
    Street,City,State,Zipcode) 
    SELECT @ckey2+1,CourtID,FloorType,HourlyRate,c.ClubID,Street,City,State,Zipcode 
    from suchwow.Court c,suchwow.Club cl where c.clubID=cl.ClubID and 
    CourtID=new.CourtID and cl.ClubID=new.ClubID; 
END // 
DELIMITER ; 
関連する問題