【发布时间】:2018-01-09 00:25:41
【问题描述】:
我从未使用过存储过程或函数,只使用了最少的 JOIN 函数。
有没有办法将多个查询存储在一个位置(表、存储过程或存储函数)以更新另一个表中的记录。理想情况下,我希望将这些查询安排为每晚运行。
我的 TABLE 不断添加新记录,LINK 通常为 NULL,但我需要根据某些条件填充它(我已为此示例进行了简化)。我使用 PRODUCT 和其他一些列来确定 LINK 值是什么。
查询示例:
更新 TABLE set LINK='XYZ' where PRODUCT='X';
更新 TABLE set LINK='A' where PRODUCT='A' and STYLE='SAMPLE';
更新 TABLE set LINK='C' where PRODUCT='C' and STYLE='SAMPLE1';
更新 TABLE set LINK='C2' where PRODUCT='C' and STYLE='SAMPLE2';
一种可能的解决方案是使用以下命令创建第二个表:PRODUCT='X' = LINK='XYZ' 然后我可以使用 JOIN 来更新我的表吗?
此外,有没有办法按计划自动运行这些更新?
提前感谢您!希望这是有道理的,这是我的第一篇文章,长期读者。
【问题讨论】:
-
如果
PRODUCT='X'总是意味着STYLE='XYZ';那么STYLE可能应该在定义PRODUCT的任何地方。当然,您说您已经简化了它;因此,如果它更复杂,您可能会使用 INSERT trigger 并让它实时发生。 -
只做一个触发器的问题是每次有新条件时都需要更新触发器。正如您所考虑的,使用一种“映射”表,您只需要更新映射规则并让触发器使用这些规则......但这让我们回到“为什么在 'TABLE' 表中有数据首先,什么时候可以在需要时加入映射表?”
-
@Uueerdo 感谢您的 cmets。我认为触发器可能是一个不错的解决方案,我的标准不会经常改变,但是如果没有对触发器进行更多研究,我想知道管理这些触发器会有多困难(我将有大约 300 个2300 万行的数据库)。我喜欢实时的想法,但这也可能会引入一些我认为的性能问题。我需要对触发器和预定查询进行一些测试。
-
是的,触发器可以减慢它们所基于的任何操作(INSERT/UPDATE/DELETE);所以如果速度很关键,应该进行测试。
标签: mysql sql join stored-procedures stored-functions