如何使 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_amount
和 book_customer.amount
)的类型相同 (INT)。
- 由于这个SQL程序是因为一个非常小的任务而制作的,所以我和我的团队都没有查找适当的“编码设计”,而是依赖于自我建立的方法。 (也许这很重要,我不知道)
- 我收到的错误是“1054”,但如果我弄乱它,它会在“1063”和“11xx”之间变化,我似乎无法复制。
编辑:
- 已解决!
菜鸟错误;我使用了一个没有“where”子句的不完整的 sintaxis。
我在搜索时没有找到它的原因是我一开始就不知道可能有超过 1 个 sintaxis。
- 忘了对 Linoff 说声谢谢!
- 提高问题的可读性。
您只想参考 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;
在我定义触发器及其 过程 之后,将库存图书的数量减少 在单独的 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_amount
和book_customer.amount
)的类型相同 (INT)。 - 由于这个SQL程序是因为一个非常小的任务而制作的,所以我和我的团队都没有查找适当的“编码设计”,而是依赖于自我建立的方法。 (也许这很重要,我不知道)
- 我收到的错误是“1054”,但如果我弄乱它,它会在“1063”和“11xx”之间变化,我似乎无法复制。
编辑:
- 已解决!
菜鸟错误;我使用了一个没有“where”子句的不完整的 sintaxis。
我在搜索时没有找到它的原因是我一开始就不知道可能有超过 1 个 sintaxis。 - 忘了对 Linoff 说声谢谢!
- 提高问题的可读性。
您只想参考 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;