2016-03-05 43 views
2
IF NOT EXISTS(SELECT * FROM `user` WHERE `name`='Rutvij' AND `lang`='python') 
    BEGIN 
     INSERT INTO `user` VALUES ('Rutvij', 'python', 25) 
    END 
ELSE 
    BEGIN 
     UPDATE user SET `name`='Kanzaria' WHERE `name`='Rutvij' 
    END 

我想在phpmyadmin的SQL區域上面的查詢。我正在使用xampp。這是投擲錯誤,指出如果不存在不工作

1064 - 您的SQL語法錯誤;檢查對應於你的MySQL服務器版本正確的語法使用 附近手冊「IF EXISTS(SELECT * FROM用戶) SELECT名字從使用」在行1

我也曾嘗試下面的代碼

IF NOT EXISTS(SELECT * FROM user WHERE name='Rutvij' AND lang='python') 
    BEGIN 
     INSERT INTO user VALUES ('Rutvij', 'python', 25) 
    END 
ELSE 
    BEGIN 
     INSERT INTO user VALUES ('Kanzaria', 'python', 25) 
    END 

掙扎了這麼久。請幫助。謝謝!!

+1

如果作爲一個路由選項(而不是函數)只能在程序和triggers.You可能還需要尋找到更換爲。 – Mihai

+1

我以爲你需要在'mysql'中用'if'聲明'then'語句嗎? – sgeddes

回答

4

MySQL不允許if邏輯,除非您在編程塊(存儲過程,觸發器或函數)中。

幸運的是,你可以做同樣的WHERE邏輯:

INSERT INTO user 
    SELECT 'Rutvij', 'python', 25 
    FROM DUAL 
    WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python') 
    UNION ALL 
    SELECT 'Kanzaria', 'python', 25 
    FROM DUAL 
    WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python'); 

MySQL中INSERT前,應處理SELECT,所以只有一行應插入。

或者,你可以做到這一點作爲兩個INSERT秒,但以相反的順序:

INSERT INTO user 
    SELECT 'Kanzaria', 'python', 25 
    FROM DUAL 
    WHERE EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python'); 

INSERT INTO user 
    SELECT 'Rutvij', 'python', 25 
    FROM DUAL 
    WHERE NOT EXISTS (SELECT 1 FROM user WHERE name = 'Rutvij' AND lang = 'python'); 
+0

如果我想在記錄存在時更新,該怎麼辦?那我該怎麼辦?如果不存在,則插入其他更新。 –

+0

@RutvijKanzaria。 。 。你會使用'insert。 。 。在重複密鑰更新上。 –

1

這不是一個查詢,這將是一個帶有控制流邏輯的sql腳本,這在存儲程序(過程,函數,觸發器)之外是不允許的。即使你將上面的代碼封裝到一個存儲過程中也不行,因爲存在/不存在只能用在子查詢中。

我會做到以下幾點:

  1. 創建stored procedure
  2. 聲明變量
  3. 使用select into取的行數,其中name='Rutvij' AND lang='python'到您的變量的整數。
  4. 使用if語句根據記錄數進行插入。