我正在创建一个触发器以在另一个表中插入一行时更新一个表。在这个更新语句中,我需要从第一个表中选择一个值。然后我需要在更新语句的两个地方使用这个选定的值。这是我现在的触发语句:
CREATE TRIGGER rsrcInsTrig AFTER INSERT ON jos_resources
FOR EACH ROW
UPDATE newtbl
SET subtree_count = subtree_count + 1
WHERE lft <= (SELECT lft FROM newtbl WHERE taxon_id = NEW.taxon_id)
AND rgt >= (SELECT lft FROM newtbl WHERE taxon_id = NEW.taxon_id);
这很好用,但不是很优雅(我不需要被告知“newtbl”不是一个好名字;我没有成功)。显然,我希望子查询只运行一次,并保存并使用两次。如果这是一种编程语言,我会定义一个变量。
有没有办法做我想做的事?这真的是一个问题吗(请注意,“newtbl”有超过 150万个条目,所以对它的查询并不是微不足道的)?关于这个主题的其他问题是使用连接解决的,但我认为这不适用于这里。