如果所选字符串与确定的字符串类似,则更新值。如果没有相似之处,请插入一个新行。
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语法出错;查看与您的MySQL服务器版本对应的手册,以便在'if EXISTS附近使用正确的语法(SELECT * FROM spam WHERE levenshtein_ratio(text,'teststring')> = 50) '第1行
答案 0 :(得分:1)
此代码必须位于函数,存储过程或事件中。
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 :(得分: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
的值。