mysql - 在 MySQL 触发器中声明一个变量;引用相同的行类型
问题描述
表数据和更多信息在这里
products_stock
products
与viampn
列有外键关系。
Basic Rundown:如果anmpn
至少比我的表0
中的列大一行,则该列应触发为表中的1以指示库存。available
products_stock
in_stock
products
如果列中的所有mpn
行(/size
变体)都设置为0
,available
则触发器应in_stock
在products
表上设置为 0 以指示没有库存。
前者很好地表明有库存,后者在可用时根本不工作0
。我推断它无法通过IF rowCount < 1 THEN
声明。这是现在的触发器:
BEGIN
DECLARE rowCount INTEGER;
IF NEW.available <> OLD.available THEN
IF NEW.available > 0 AND OLD.available <= 0 THEN
UPDATE
products
SET
products.in_stock = 1
WHERE
products.mpn = NEW.mpn;
ELSEIF NEW.available <= 0 AND OLD.available > 0 THEN
SET
@rowCount := (
SELECT
COUNT(NEW.mpn)
FROM
product_stock
WHERE
product_stock.available > 0
);
IF rowCount < 1 THEN
UPDATE
products
SET
products.in_stock = 0
WHERE
products.mpn = NEW.mpn;
END IF;
END IF;
END IF;
END
我尝试了许多不同的设置变体@rowCount
——直接在下面DECLARE rowCount INTEGER;
,嵌入在IF
条件中(如上所示),在声明中添加另一个 AND 条件(product_stock.available > 0 AND product_stock.mpn = NEW.mpn);
)等等。
问题是rowCount
在计算时没有考虑行的 MPN - 而是计算所有行,无论 MPN 是多少,都使用product_stock.available > 0
.
如果我取出@rowCount
,它会触发 0 in products.in_stock
,但不会考虑 mpn 具有的任何其他变体。
是否可以修改触发器/声明的变量以仅计算mpn
该available
列所在的值UPDATED
?
解决方案
推荐阅读
- java - 如何使用本机 Android Studio Java 运行 gradlew 构建
- apache-nifi - Nifi将sql转换为json结构化
- python - Python:SSLError,握手错误,获取请求中出现意外的 EOF
- javascript - 在不使用任何内置函数的情况下修剪字符串左侧的空白
- vuetify.js - How can you use a v-text-field inside of a v-tooltip?
- c++ - 是否矢量
** p = 新向量 * [10];在 C++ 中有意义吗? - reactjs - 有条件地加载路由,仅适用于顶部的路由:React-Router
- python - 遍历字典:TypeError:列表索引必须是整数或切片,而不是 str
- powershell - 如何防止将 Powershell 模块安装到 OneDrive 中
- asp.net-mvc - ASP.NET MVC 路由不再通过约束的问题