【问题标题】:FUNCTION "SUM does not exist"功能“总和不存在”
【发布时间】:2016-09-03 18:00:18
【问题描述】:

我正在使用 mysql 5.5.11,当我执行下面的脚本时

INSERT INTO payments(created,  Amount,  user,  Remarks,  orderid,  paymethod) 
VALUES('2016-09-03', 0.0, 'admin', '', 4, 'Cash');

我收到错误

SQL 错误:FUNCTION mydb.SUM 不存在。检查'函数名称 参考手册中的“解析和解析”部分

这是表架构

CREATE TABLE payments (
  ID         int AUTO_INCREMENT NOT NULL,
  OrderID    int,
  Amount     decimal(11,2),
  Created    varchar(20),
  Remarks    varchar(160),
  user       varchar(60),
  PayMethod  varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci,
  /* Keys */
  PRIMARY KEY (ID)
) ENGINE = InnoDB;

错误的原因可能是什么

这是附加到表格的触发器

BEGIN
  /* Trigger text */
  UPDATE Orders Set Paid =(Select SUM (Amount) From Payments AS p Where p.OrderID  = Orders.ID),PayMethod =new.PayMethod  WHere Orders.id = new.OrderID;
   UPDATE Orders Set Bal = Total - Paid  WHere Orders.id = new.OrderID;
END

【问题讨论】:

  • 那张桌子上有触发器吗?
  • 除了@Hamlet 所问的...user 是大多数 DBMS 中的保留字。如果您要拥有一个具有该名称的列,则每次使用它时都必须正确地对其进行转义。如果是我,我会为该列找到一个不同的名称,以免给您带来麻烦和额外的工作。
  • @HamletHakobyan,是的,我附上了触发器

标签: mysql .net


【解决方案1】:

查看触发器:

UPDATE Orders Set Paid =(Select SUM (Amount) From Payments AS p Where p.OrderID  = Orders.ID),PayMethod =new.PayMethod  WHere Orders.id = new.OrderID;

MySQL 不接受函数名和括号之间的空格(除非您设置了 SQL_MODE=IGNORE_SPACE 但这会给您带来其他不良副作用)

您可以通过运行检查 SQL_MODE 设置:

SHOW GLOBAL VARIABLES LIKE 'SQL_MODE';

关于此的 MySQL 文档:link

一些例子:

mysql> select sum(5);
+--------+
| sum(5) |
+--------+
|      5 |
+--------+
1 row in set (0.00 sec)

mysql> select sum (5);
ERROR 1305 (42000): FUNCTION sum does not exist

解决方案:删除空格

UPDATE Orders Set Paid =(Select SUM(Amount) From Payments AS p Where p.OrderID  = Orders.ID),PayMethod =new.PayMethod  WHere Orders.id = new.OrderID;

【讨论】:

  • 当我们点击格式化 sql 查询时,如何告诉 sqlyog 忽略空格,因为它每次在 sum 和 count 之后添加空格
【解决方案2】:

删除SUM( 之间的空格,如下所示:Select SUM(Amount) From Payments

【讨论】:

  • 对我来说,结尾 ")" 和 "," 之间缺少空格 - mysql 命令行客户端的语法非常严格
猜你喜欢
  • 2011-11-23
  • 2021-12-11
  • 2021-01-29
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 2012-01-31
  • 2012-02-20
相关资源
最近更新 更多