2015-12-20 64 views
0

這是我的SQL,但是MySQL服務器一直說它在SQL語法中有錯誤。我已經嘗試了很多次,但不起作用。請幫忙!IF觸發錯誤

DELIMITER // 
CREATE TRIGGER Score_Count_for_Contestant 
AFTER INSERT ON award 
FOR EACH ROW 
BEGIN 
IF NEW.award = 'gold'AND contestant.CID=new.CID THEN 
    UPDATE contestant SET contestant.score= contestant.score+10 

IF new.Award='silver' AND contestant.CID=new.CID THEN 
    UPDATE contestant SET contestant.score= contestant.score+8 

IF new.Award='bronze' AND contestant.CID=new.CID THEN 
    UPDATE contestant SET contestant.score= contestant.score+6 
END IF 
END // 

DELIMITER ; 
+0

告訴我們一個錯誤! – Marusyk

+0

'UPDATE'查詢結束後缺少';'分隔符。 – jso

+0

你可以發佈「獎」和「參賽者」結構嗎? – wogsland

回答

1

我將消除if和簡化的邏輯:

UPDATE contestant c 
    SET c.score = (case when NEW.award = 'gold' then c.score + 10 
         when NEW.award = 'silver' then c.score + 8 
         when NEW.award = 'bronze' then c.score + 6 
         else c.score 
        end) 
    WHERE c.CID = new.CID 

你可以,如果有很多其他獎項此條件添加到where條款NEW.award IN ('gold', 'silver', 'bronze')

您的代碼不起作用,因爲您在IF中引用contestant.CID,並且未定義。注意:您仍然可能遇到分隔符問題,但代碼示例中的內容不清楚。

+0

沒有注意到'參賽者'參考,然後刪除我原來的答案(因爲修復分隔符不會解決問題)。感謝您指出。 – jso

+0

非常感謝Gordon Linoff!我愛你!!!有用!你決定了 – mobility