2012-07-28 83 views
1

我一直在爭奪這個時間太長,所以我在這裏尋求幫助...的MySQL 5.5查詢基於IF語句

我有我想要做以下MySQL的存儲過程:

給出一個「身份證」和給定記錄中的「用戶名」

  1. 如果ID不存在表中,然後創建記錄
  2. 否則,如果ID存在,用戶名是不一樣的東西存在然後更新記錄
  3. 別的什麼也不做

我已經試過如下:

BEGIN 

DECLARE doCreate INT; 
DECLARE doUpdate INT; 
SELECT COUNT(*) INTO doCreate FROM app_user WHERE id=1; 
IF (doCreate > 0) THEN 
    SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other'; 
END IF 

IF(doCreate = 0) THEN ---SYNTAX ERROR ON THIS LINE--- 
    SELECT 'CREATE'; 
ELSE IF(doUpdate = 0) THEN 
    SELECT 'UPDATE'; 
ELSE 
    SELECT 'NOTHING'; 
END IF 

END 

我也試過用case語句代替IF-ELSEIF-else塊,但得到相同的結果...

CASE ---ERROR ON THIS LINE--- 
    WHEN doCreate = 0 THEN 
     SELECT 'CREATE'; 
    WHEN doUpdate = 0 THEN 
     SELECT 'UPDATE'; 
    ELSE 
     SELECT 'NOTHING'; 
END 
  • 我似乎得到第一END IF之後到來的任何一個語法錯誤,所以這是出現的第一個問題...

任何幫助將不勝感激 - 我敢肯定有更好的方法來做到這一點。

+0

更簡單的方法是使用INSERT(id,username)INTO app_user VALUES({id},{username})ON DUPLICATE KEY UDPATE username = VALUES(username)'。 – Vatev 2012-07-28 19:25:48

+0

Vatev,我認爲你的解決方案會一直執行更新,如果id存在。如果所有字段已經完全相同,我不希望它執行更新。 – Cailen 2012-07-28 19:33:13

+0

是的,它會的。我以爲我應該建議它,因爲它以一種更簡單的方式對存儲過程做類似的事情。 – Vatev 2012-07-28 19:38:07

回答

2

我相信你需要終止END IF s與;,並且內部ELSEIF應該是一個單詞。否則,需要另一個END IF,但找不到。

IF (doCreate > 0) THEN 
    SELECT COUNT(*) INTO doUpdate FROM app_user WHERE id=1 AND username='other'; 
END IF; /* terminate with ; */ 

IF(doCreate = 0) THEN 
    SELECT 'CREATE'; 
ELSEIF(doUpdate = 0) THEN 
    SELECT 'UPDATE'; 
ELSE 
    SELECT 'NOTHING'; 
END IF; /* terminate with ; */ 

查看MySQL IF/ELSE syntax reference的各種使用示例。

+0

謝謝!..似乎擺脫了最初的語法錯誤...但是我現在在最後一行(在END)得到一個。 – Cailen 2012-07-28 19:24:07

+1

ELSEIF ...一個字:)感謝您的參考。 – Cailen 2012-07-28 19:27:43

+0

@Cailen是的,我沒有注意到'ELSEIF'。否則,它期望在那裏找到另一個沒有找到的'END IF'。 – 2012-07-28 19:29:08