2014-07-09 169 views
1

下面的SQL查詢給我的錯誤:SQL查詢錯誤 - 如果Else語句

IF EXISTS (SELECT * FROM comments WHERE user_id='2' AND course_id='1') 
UPDATE comments SET page1='exists' WHERE user_id='2' AND course_id='1' 
ELSE 
INSERT INTO comments (user_id,course_id,page1) VALUES ('2','1','inserted') 

「#1064 - 你在你的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊爲正確的語法使用附近'IF EXISTS(選擇*從評論WHERE user_id ='2和course_id ='1')在線1更新co'

我敢肯定,語法是正確的?!

+1

您是否試圖將其作爲一個獨立的SQL(在這種情況下,在user_id和course_id上​​使用'INSERT .... ON DUPLICATE KEY UPDATE')將會更容易)作爲存儲過程中的行? – Kickstart

+0

我試圖通過phpMyAdmin運行這個SQL查詢 – user3402227

+0

然後,這不是有效的SQL。 IF是流控制語句,並且對於原始SQL查詢,不存在要控制的流。 – Kickstart

回答

2

添加一個唯一的覆蓋user_id和course_id的密鑰

然後只需使用

INSERT INTO comments (user_id,course_id,page1) 
VALUES ('2','1','inserted') 
ON DUPLICATE KEY UPDATE page1='exists' 
+0

感謝Kickstart,它在phpMyAdmin中完美工作。雖然在php中使用這個SQL語句似乎不起作用。插入作品,但我認爲它是造成問題的重複關鍵部分。有沒有辦法解決?對不起,我想如果它在phpMyAdmin中工作,它也可以在PHP中工作。 – user3402227

+1

對不起,它確實有用!再次感謝! – user3402227

1

入住此IF-statement語法:

試試這個:

IF EXISTS (SELECT * FROM comments WHERE user_id='2' AND course_id='1') THEN 
    UPDATE comments SET page1='exists' WHERE user_id='2' AND course_id='1'; 
ELSE 
    INSERT INTO comments (user_id,course_id,page1) VALUES ('2','1','inserted'); 

OR

按照我,你必須做出的實踐BEGIN ... END塊,如下圖所示。

IF EXISTS (SELECT * FROM comments WHERE user_id='2' AND course_id='1') THEN 
BEGIN 
    UPDATE comments SET page1='exists' WHERE user_id='2' AND course_id='1'; 
END 
ELSE 
BEGIN 
    INSERT INTO comments (user_id,course_id,page1) VALUES ('2','1','inserted'); 
END 

我上面的查詢可以在程序(PL-SQL)中使用。如果你想使用上述SQL 查詢然後使用下面的代碼:

user_id & course_id列創建UNIQUE約束,如果一個尚不存在:

ALTER TABLE comments ADD UNIQUE (user_id,course_id); 

使用INSERT ... ON DUPLICATE KEY UPDATE

INSERT INTO comments (user_id,course_id,page1) 
VALUES ('2','1','inserted') 
ON DUPLICATE KEY UPDATE page1='exists' 
+0

我不認爲這是有效的MySQL語法 –

+0

你試過嗎?在SQL中沒有'IF'語句(並且在MySQL的SQL方言中都沒有) –

+0

感謝您爲Saharsh所做的努力,但這仍然行不通 – user3402227