如果条件UPDATE否则INSERT

时间:2014-12-06 22:19:38

标签: mysql if-statement 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语法出错;查看与您的MySQL服务器版本对应的手册,以便在'if EXISTS附近使用正确的语法(SELECT * FROM spam WHERE levenshtein_ratio(text,'teststring')> = 50) '第1行

2 个答案:

答案 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的值。