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,为什么不在UNIQUE这些列中定义一个约束,然后使用INSERT ... 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 回答