我有两个表
公司信息(代码、价格、父表)
观察列表(符号,观察值)
每当更新 COMPANYINFO 中的 PRICE 时,我需要从 COMPANYINFO 的 PARENTTABLE 字段中的表中获取最大值并更新 WATCHLIST 表的 WATCHVALUE。
我在COMPANYINFO中定义的触发器如下
开始
更新观察列表 SET WATCHVALUE= (SELECT MAX(WATCHVALUE) FROM NEW.PARENTTABLE) WHERE SYMBOL = NEW.SYMBOL;
结束
数据库没有采用 NEW.PARENTTABLE 值,而是尝试采用 NEW 数据库的 PARENTTABLE 表。是否可以使触发器采用字段值。我不能使用动态查询,因为它在 MySql 触发器中是不允许的。
不可以,您不能将值用作表名。表名必须在SQL语句解析时固定。
您可以为每个可能的父表名称使用 CASE 语句,并从相应的表中查询最大值。
BEGIN
DECLARE MAX_VALUE NUMERIC(9,2);
CASE NEW.PARENTTABLE
WHEN 'table1' THEN SELECT MAX(WATCHVALUE) INTO MAX_VALUE FROM table1;
WHEN 'table2' THEN SELECT MAX(WATCHVALUE) INTO MAX_VALUE FROM table2;
...others...
END CASE;
UPDATE WATCHLIST SET WATCHVALUE = MAX_VALUE WHERE SYMBOL = NEW.SYMBOL;
END
如果你需要引用各种各样的表,我认为你的数据模型可能设计得不好。听起来很可疑。
回复你的评论:
您不需要为每个交易品种准备不同的表格。这是数据库设计中可疑模式的根本原因。我在我的书中将其称为“元数据问题”SQL Antipatterns .
我是一名优秀的程序员,十分优秀!