4

みんな私はこの問題の解決策を見つけることができません.私が試したことが何であれ、常に構文エラーが発生します...私を見てくれませんか、ありがとう

create procedure SP_Insert(in MatchIDP int,in TipID int, in User int)
begin

if exists(
select BetSlipID from betslips where MatchID = MatchIDP and UserID = User)
(
   update Betslips set TipID = 2
)
else
(
   insert into Betslips (MatchID,TipID , UserID) value (MatchIDP,TipID,User)
)
end if
end

挿入する前にテーブルにデータが存在するかどうかを確認したいだけで、主キーは何の意味もないため、「重複キー更新時」を使用できません.2〜3個の外部キーを入れたテーブル....

4

2 に答える 2

2

IF構文が正しくありません。そのはず:

delimiter ;;

create procedure SP_Insert(in MatchIDP int,in TipID int, in User int)
begin

if exists(
  select * from betslips where MatchID = MatchIDP and UserID = User
) then
  update Betslips set TipID = 2; -- where ?
else
  insert into Betslips (MatchID,TipID , UserID) values (MatchIDP, TipID, User);
end if;

end;;

ただし、で重複(MatchID, UserID)エントリを許可しない場合は、これらの列に制約をBetslips定義してから、次を使用してください。UNIQUEINSERT ... ON DUPLICATE KEY UPDATE

ALTER TABLE Betslips ADD UNIQUE INDEX (MatchID, UserID);

INSERT INTO Betslips (MatchID, TipID, UserID) VALUES (?, ?, ?)
ON DUPLICATE KEY UPDATE TipID = 2;
于 2012-09-08T20:08:09.477 に答える
0
CREATE PROCEDURE SP_Insert (IN MatchIDP INT, IN TipID INT, IN USER INT)
BEGIN
        DECLARE existing INT DEFAULT NULL;

        SELECT BetSlipID
        INTO   existing
        FROM   betslips
        WHERE  MatchID = MatchIDP
        AND    UserID = USER;

        IF existing is not null THEN
            UPDATE Betslips SET TipID = 2;
        ELSE
            INSERT INTO Betslips (MatchID, TipID, UserID)
            VALUES (MatchIDP, TipID, USER);
        END IF;

END
于 2012-09-08T20:10:49.120 に答える