这是我要使用的查询。

  SET @id = 289;
    SET @feedId = 5;
    SET @statusid = 2;
    SET @processId = 1;

    SET @feedIdExists = (
     SELECT EXISTS (
       SELECT *
       FROM feed_statuses
       WHERE FeedId = @feedId));

    IF feedIdExists = 1 THEN
     UPDATE `snap`.`feed_statuses`
      SET
      `ProcessId` = @processId ,
      `StatusId` = @statusId ,
      `ProcessEndDate` = NOW()
      WHERE
      `FeedId` = @feedId;
    ELSE
     INSERT INTO `snap`.`feed_statuses`
      (`FeedId`,
      `ProcessId`,
      `StatusId`,
      `ProcessStartDate`
      )
      VALUES
      (@feedId,
      @processId,
      @statusId,
      NOW());
    END IF;


嗨,大家好,
if语法存在3个错误。
我不明白。
为什么它不能正常工作?

已执行9个查询,6个成功,3个错误,0个警告

查询:使用对齐

受影响的0行

执行时间:0.001秒
传输时间:0.001秒

总时间:0.002秒

查询:SET @id = 289

受影响的0行

执行时间:0.001秒
传输时间:0秒

总时间:0.001秒

查询:SET @feedId = 5

受影响的0行

执行时间:0.002秒
传输时间:0秒

总时间:0.002秒

查询:SET @statusid = 2

受影响的0行

执行时间:0.002秒
传输时间:0秒

总时间:0.002秒

查询:SET @processId = 1

受影响的0行

执行时间:0.002秒
传输时间:0秒

总时间:0.002秒

查询:SET @feedIdExists =(SELECT EXISTS(SELECT * FROM feed_statuses WHERE FeedId = @feedId))

受影响的0行

执行时间:0.002秒
传输时间:0秒

总时间:0.002秒

查询:IF feedIdExists = 1然后更新snapfeed_statuses SET ProcessId = @processId,StatusId = @statusId,ProcessEndDate ...

错误代码:1064
您的SQL语法有误。查看与您的MySQL服务器版本相对应的手册,以在'IF feedIdExists = 1 THEN附近使用正确的语法
     更新snapfeed_statuses
      组
      第1行的“ Pr”

执行时间:0秒
传输时间:0秒

总时间:0.002秒

查询:ELSE INSERT INTO snapfeed_statusesFeedIdProcessIdStatusIdProcessStartDate)值(@ feedId,@ processId,@ s ...

错误代码:1064
您的SQL语法有误。查看与您的MySQL服务器版本相对应的手册,以获取在'ELSE附近使用的正确语法
     插入snapfeed_statuses
      (FeedId
      第1行的“ ProcessId”

执行时间:0秒
传输时间:0秒

总时间:0.002秒

查询:END IF

错误代码:1064
您的SQL语法有误。检查与您的MySQL服务器版本相对应的手册,以在第1行的“ END IF”附近使用正确的语法

执行时间:0秒
传输时间:0秒
总时间:0.002秒

最佳答案

您可以使用Insert ... ON DUPLICATE UPDATE解决此问题。

注意:您必须先具有UNIQUE密钥,而且我认为您已经拥有它。

INSERT INTO `snap`.`feed_statuses`
  (`FeedId`,
  `ProcessId`,
  `StatusId`,
  `ProcessStartDate`
  )
  VALUES
  (@feedId,
  @processId,
  @statusId,
  NOW());
ON DUPLICATE KEY
UPDATE
  `ProcessId` = @processId ,
  `StatusId` = @statusId ,
  `ProcessEndDate` = NOW()


您必须检查以下内容:INSERT...ON DUPLICATE KEY

关于mysql - MySQL更新如果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33996327/

10-10 16:56