假设我有一个查询,我想存储它,例如:
SET @v1 := (SELECT * FROM users);
SELECT @v1;
在某些情况下,这个查询会超级复杂(很多连接,聚合等),有时候我需要做同样的查询,但是添加了WHERE
子句(查询会给出上一个查询的子集)。类似的东西:
SELECT * FROM users WHERE isAdmin = true
我不想再次执行查询,我想使用上一个查询的结果(所以我可以跳过再次执行长而复杂的查询),类似(这不起作用):
SELECT * FROM @v1 WHERE isAdmin = true
我该怎么做?
答案 0 :(得分:0)
尝试使用DCEVM Scala
:
VIEW
答案 1 :(得分:0)
为您的输出创建一个VIEW
create view vw_temp as SELECT * FROM users // you can add join query also
现在称之为
SELECT * FROM vw_temp WHERE isAdmin = true
答案 2 :(得分:0)
我唯一能想到的是使用TEMPORARY TABLE(仅对当前会话可见),例如
create temporary table v1 (index (isAdmin)) as
(
select *
from users
);
然后您可以从此临时表中执行选择:
select * from v1 where isAdmin=true;
当然,如果查询很复杂并且需要花费大量时间来执行,这可能是一个好主意,但它只会返回很少的记录。否则它可能比执行两次原始查询更昂贵(优化器可能能够在更短的时间内使用适当的索引运行第二个查询)。