mysql - 从选择插入失败并出现奇怪的错误

标签 mysql triggers

我有一个插入后触发器,它将从选择中获取数据,这将返回错误

列计数与第 1 行的值计数不匹配 SQL1.sql 1 1

已尝试手动运行此命令 - 相同的结果

  INSERT INTO stkmonth (MONTH, YEAR, LOCATION, ATTRIB1, ATTRIB2, ATTRIB3, QTY_ONHAND, COST)
    VALUES ((SELECT
      MONTH(new.TRANS_DATE) AS month,
      YEAR(new.TRANS_DATE) AS year,
      new.location AS location, stock.ATTRIB1, stock.ATTRIB2, stock.ATTRIB3,
      SUM(stocklvl.QTY_ONHAND) AS qty_onhand,
      SUM(stocklvl.QTY_ONHAND * stocklvl.AVG_COST) AS cost
    FROM sales INNER JOIN stocklvl ON sales.ISC_CODE = stocklvl.ISC_CODE
    INNER JOIN stock ON sales.ISC_CODE = stock.ISC_CODE WHERE stock.ISC_CODE = new.isc_code GROUP BY stocklvl.ISC_CODE))
  ON DUPLICATE KEY UPDATE
    qty_onhand = qty_onhand - new.qty, cost = (new.qty * new.cost);

我希望这能起作用,但似乎认为存在列错误。 请注意,有时可能找不到任何内容来选择,这没关系,在这种情况下我希望它继续前进,空记录集可能是问题所在吗?

最佳答案

引用:MySQL Insert...Select Syntax

  • Insert..Select 中,请勿使用 VALUES 关键字。
  • 不要将 select 语句括在方括号中。
INSERT INTO stkmonth (MONTH, YEAR, LOCATION, ATTRIB1, ATTRIB2, ATTRIB3, QTY_ONHAND, COST)
SELECT 
    MONTH(new.TRANS_DATE) AS MONTH, 
    YEAR(new.TRANS_DATE) AS YEAR,
    new.location AS location, 
    stock.ATTRIB1, 
    stock.ATTRIB2, 
    stock.ATTRIB3, 
    SUM(stocklvl.QTY_ONHAND) AS qty_onhand, 
    SUM(stocklvl.QTY_ONHAND * stocklvl.AVG_COST) AS cost
FROM sales
INNER JOIN stocklvl ON sales.ISC_CODE = stocklvl.ISC_CODE
INNER JOIN stock ON sales.ISC_CODE = stock.ISC_CODE
WHERE stock.ISC_CODE = new.isc_code
GROUP BY stocklvl.ISC_CODE
ON DUPLICATE KEY UPDATE qty_onhand = qty_onhand - new.qty, cost = (new.qty * new.cost);

关于mysql - 从选择插入失败并出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57650594/

相关文章:

javascript - 使用 Angular/PHP 将 JSON 对象插入 MySQL 表

MySQL 触发器使用触发器查询中的数据

sql - 触发器如何在单个事务中插入多行时触发

MySQL 触发器使用不同的 TIMEZONE

mysql - 从数据源中检索数据库名称

mysql - 如何让 Shiny 的应用程序与云关系数据库(在 MySQL 中)对话?

php - 将查询结果限制为特定行

mysql - "select count(null)"和 "select count(1)"之间的区别

mysql触发器部分工作

sql-server - 用于审核的 ORIGINAL_LOGIN 和 SYSTEM_USER 函数?