【问题标题】:SQL: Unrecongnized statement near conditional (IF)SQL:条件(IF)附近无法识别的语句
【发布时间】:2020-08-30 05:12:13
【问题描述】:

我以前从未在 SQL 中使用过 IF。我需要更新机构是特定数字的行(如果存在),如果不存在则插入。为了避免先使用选择然后插入或更新,我想尝试使用 IF 语句。我从我在文档中读到的内容认为它应该是这样的:

IF (NOT EXISTS(SELECT evaluations FROM tEvaluations WHERE institution = 0))
BEGIN 
    INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
END 
ELSE 
BEGIN 
    UPDATE tEvaluations SET evaluations = 10 WHERE institution = 0
END

但是我得到了这个错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'BEGIN
    INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
END' at line 2

我正在尝试在 phpmyadmin 中运行此查询以测试查询应该如何。

【问题讨论】:

  • 您使用的是哪个 dbms?
  • @jarlh phpmyadmin 实现 MySQL - 但它可能是旧版 MySQL 5 或现代 MySQL 8 - 它们之间的差异很大。
  • @jarlh 我猜 MySQL 正在查看错误消息 查看与您的 MariaDB 服务器对应的手册
  • 我正在使用 MariaDB

标签: mysql sql mariadb


【解决方案1】:

您不能在普通 SQL 语句中使用 if..else 块,除非它位于程序块内。在我看来,您正在寻找 INSERT ON DUPLICATE KEY UPDATE 之类的

INSERT INTO tEvaluations (institution,evaluations) VALUES (0,0)
ON DUPLICATE KEY UPDATE evaluations = 10;

根据文档,您的任一列都应该有一个针对它定义的UNIQUE 约束。引用文档

如果您指定一个 ON DUPLICATE KEY UPDATE 子句和一行要 插入会导致 UNIQUE 索引或 PRIMARY 中的重复值 KEY,发生旧行的更新。例如,如果 a 列是 声明为 UNIQUE 并包含值 1

【讨论】:

  • 我运行你的查询两次。就像它一样,它插入了 (0,0) 两次。而不是只有一次然后更新。我是否需要创建一个约束,即机构、评估是一个独特的对或类似的东西?
  • @aarelovich 是的,请参阅答案中的编辑,此外,请查看答案中链接的文档以获取更多详细信息
猜你喜欢
  • 1970-01-01
  • 2022-01-21
  • 2017-01-03
  • 1970-01-01
  • 2017-09-05
  • 2020-02-15
  • 1970-01-01
  • 2019-01-16
  • 1970-01-01
相关资源
最近更新 更多