2014-12-06 83 views
1

如果所選字符串類似於確定的字符串,則更新一個值。如果沒有相似性,請插入一個新行。如果條件UPDATE else INSERT

if EXISTS(SELECT * FROM spam WHERE levenshtein_ratio(text,'teststring') >= 50) 
    UPDATE spam SET num = num + 1 WHERE levenshtein_ratio(text,'teststring') >= 50 
ELSE 
    INSERT INTO spam (text) VALUES ('teststring') 

的levenshtein_ratio功能,更新的行,插入新行,並適當選擇類似的行各項工作。問題是if語句有錯誤,我無法修復。

#1064 - 您的SQL語法錯誤; (SELECT * FROM spam WHERE levenshtein_ratio(text,'teststring')> = 50) 'at line 1

+0

您似乎在測試「something> = 50」是否存在... MySQL不理解。 – kiwixz 2014-12-06 22:21:53

+0

你是什麼意思? – user3552325 2014-12-06 22:23:03

+0

如果ELSE邏輯僅在存儲過程中有效。那麼你應該讓你選擇SELECT COUNT(*)FROM ..... – Jaylen 2014-12-06 22:23:14

回答

1

這段代碼有檢查對應於你的MySQL服務器版本的手冊,在一個函數,存儲過程或事件中。

IF EXISTS(SELECT 1 FROM spam WHERE levenshtein_ratio(text,'teststring') >= 50) THEN 
    UPDATE spam SET num = num + 1 WHERE levenshtein_ratio(text,'teststring') >= 50; 
ELSE 
    INSERT INTO spam (text) VALUES ('teststring'); 
END IF; 
1

您可以將if邏輯放在控制塊(存儲過程,函數或觸發器)中。做你想做的一種方法是使用觸發器。您也可以嘗試使用兩種說法:

UPDATE spam 
    SET num = num + 1 
    WHERE EXISTS (SELECT 1 FROM spam WHERE levenshtein_ratio(text, 'teststring' >= 50) 

INSERT INTO spam(text, num) 
    SELECT t, 1 
    FROM (SELECT 'teststring' as t) t 
    WHERE NOT EXISTS (SELECT 1 FROM spam WHERE levenshtein_ratio(text, 'teststring' >= 50); 

這是一個有點比使用if效率較低,因爲你必須兩次運行狀態。另請注意,這將num的值設置爲insert