如何使 SQL UPDATE 程序在计算中使用超过 1 个 table?这样做会给我错误 1054

How to make a SQL UPDATE procedure use more than 1 table in the calculation? Doing so gives me error 1054

在我定义触发器及其 过程 之后,将库存图书的数量减少 在单独的 table[ 上指定的数量=48=](两者都是可变的),它给我错误 1054,过程中的未知列。 定义触发器和过程的代码如下:

CREATE DEFINER=`root`@`localhost` TRIGGER reduce_available
AFTER INSERT ON book_customer FOR EACH ROW
UPDATE stock SET stock.current_amount = stock.current_amount-book_customer.amount;

通常为了处理可以保证此类触发器的交互类型,我生成了一个全新的 table 来记录购买和销售,以及其他有用的数据。但是,在这种特定情况下,我没有这样的 table,并且想知道如何解决它。


一些说明:

  • 该过程并不意味着要更新超过 1 个 table。
  • 触发器只触发一个 table,这是应该的。
  • 我正在寻找一种方法来解决我的程序使用问题,而不是替代解决方案。

附加信息:

  • 当我将“减号”值设置为 1 时代码有效,这意味着未知 table 是给出错误的那个:
    UPDATE stock SET stock.current_amount = stock.current_amount-1;
    我不能简单地这样做,因为那时我遇到了一次无法向客户租用超过 1 本书的问题,因为没有“销售”table 在同样的操作。
  • 两个数据值(stock.current_amountbook_customer.amount)的类型相同 (INT)。
  • 由于这个SQL程序是因为一个非常小的任务而制作的,所以我和我的团队都没有查找适当的“编码设计”,而是依赖于自我建立的方法。 (也许这很重要,我不知道)
  • 我收到的错误是“1054”,但如果我弄乱它,它会在“1063”和“11xx”之间变化,我似乎无法复制。

编辑:

  1. 已解决! 菜鸟错误;我使用了一个没有“where”子句的不完整的 sintaxis。
    我在搜索时没有找到它的原因是我一开始就不知道可能有超过 1 个 sintaxis。
  2. 忘了对 Linoff 说声谢谢!
  3. 提高问题的可读性。

您只想参考 new 吗?如果是这样,我假设您只想更新 stock 中的一行而不是全部。你需要一个 where 子句

CREATE DEFINER=`root`@`localhost` TRIGGER reduce_available
AFTER INSERT ON book_customer FOR EACH ROW
BEGIN
    UPDATE stock s
        SET s.current_amount = s.current_amount - new.amount
        WHERE s.book_id = new.book_id;
END;