【问题标题】:Assign Query String in a variable在变量中分配查询字符串
【发布时间】:2021-09-24 16:10:03
【问题描述】:

在 mySQL 存储过程中,如何将查询字符串分配给变量,以便我可以重用它?在我的示例中,我将多次使用SELECT id FROM audit

CREATE PROCEDURE my_proc() 
BEGIN

UPDATE person SET status='Active' WHERE id = (SELECT id FROM audit);

SELECT COUNT(*) FROM (SELECT id FROM audit);

//Multile scenarios the `SELECT id FROM audit` will be used.

END

类似:

CREATE PROCEDURE my_proc() 
BEGIN
myVariable = SELECT id FROM audit;
UPDATE person SET status='Active' WHERE id = (myVariable;

SELECT COUNT(*) FROM (myVariable);

//Multile scenarios the `SELECT id FROM audit` will be used.

END

【问题讨论】:

  • 使用子查询。我认为这没有任何问题。
  • @GordonLinoff 有多次我将使用该子查询。我想把它分配给一个变量,所以如果我编辑那个子查询,我只会编辑一次。
  • audit 是否包含单行并且在过程执行期间是否会发生变化?
  • 如果您希望查询执行一次并重用结果集,请使用临时表。或者,如果您尝试将 SQL 查询(以字符串格式)保存在变量中,则需要动态运行它。 stackoverflow.com/questions/20371677/…
  • 这毫无意义。每次使用时都会解析并执行查询。如果您想重用其输出,请将其存储到临时表中。

标签: mysql sql


【解决方案1】:

这就是你要找的吗?抱歉,我不确定您需要什么。

    SELECT @myCount:= count(id)  FROM audit;
    select @myCount;

根据您的回复,您是否需要一个临时表来存储审核中的 id 并在查询中重复使用这些 ID?

create temporary table tbl_tmp_audit;
select id from audit; 

我假设您需要这个,这样您就不会在每次后续查询时都加入整个审计列。

--first query
UPDATE person AS p
INNER JOIN tbl_tmp_audit t ON p.id = t.id
SET status = 'Active';
--second query
SELECT COUNT(*) FROM tbl_tmp_audit;

Drop temporary table tbl_temp_bookings;

【讨论】:

  • 类似:myVariable = SELECT id FROM audit; UPDATE person SET status='Active' WHERE id = (myVariable);
  • 我编辑了我的代码。并举个例子
  • @average.joe,我编辑了我的回复
猜你喜欢
  • 1970-01-01
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
  • 2016-03-06
  • 2019-02-08
  • 2014-04-25
  • 1970-01-01
相关资源
最近更新 更多