【问题标题】:If condition UPDATE else INSERT如果条件 UPDATE 否则 INSERT
【发布时间】:2014-12-06 22:19:38
【问题描述】:

如果选定的字符串与确定的字符串相似,则更新一个值。如果没有相似之处,则插入新行。

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 行

【问题讨论】:

  • 你似乎在测试“something >= 50”是否存在...... MySQL 不明白。
  • 如果 ELSE 逻辑仅适用于存储过程。然后你应该选择 SELECT COUNT(*) FROM .....
  • 你最好检查if的语法

标签: mysql if-statement insert


【解决方案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;

【讨论】:

    【解决方案2】:

    您可以将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 效率要低一些,因为您必须运行条件两次。另请注意,这会在insert 上设置num 的值。

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-07
      • 1970-01-01
      • 2023-03-06
      • 2012-04-20
      相关资源
      最近更新 更多