gpt4 book ai didi

mysql - 在 MySQL 中两次使用子查询的结果

转载 作者:行者123 更新时间:2023-11-29 02:31:39 34 4
gpt4 key购买 nike

我正在创建一个触发器,在另一个表中插入一行时更新一个表。在此更新语句中,我需要从第一个表中选择一个值。然后我需要在更新语句的两个地方使用这个选定的值。这是我现在的触发语句:

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”有超过 1.5 百万 个条目,因此对它的查询并非无关紧要)?有关此主题的其他问题已使用联接解决,但我认为这不适用于此处。

最佳答案

CREATE TRIGGER rsrcInsTrig AFTER INSERT ON jos_resources
FOR EACH ROW BEGIN
DECLARE tmplft INT DEFAULT 0; -- assuming it really is an INT
SELECT lft FROM newtbl WHERE taxon_id = NEW.taxon_id INTO tmplft;
UPDATE newtbl
SET subtree_count = subtree_count + 1
WHERE lft <= tmplft
AND rgt >= tmplft;
END

关于mysql - 在 MySQL 中两次使用子查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12379554/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com