关于存储结果的WHERE子句

时间:2016-10-12 12:18:54

标签: mysql

假设我有一个查询,我想存储它,例如:

SET @v1 := (SELECT * FROM users);
SELECT @v1;

在某些情况下,这个查询会超级复杂(很多连接,聚合等),有时候我需要做同样的查询,但是添加了WHERE子句(查询会给出上一个查询的子集)。类似的东西:

SELECT * FROM users WHERE isAdmin = true

我不想再次执行查询,我想使用上一个查询的结果(所以我可以跳过再次执行长而复杂的查询),类似(这不起作用):

SELECT * FROM @v1 WHERE isAdmin = true

我该怎么做?

3 个答案:

答案 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;

当然,如果查询很复杂并且需要花费大量时间来执行,这可能是一个好主意,但它只会返回很少的记录。否则它可能比执行两次原始查询更昂贵(优化器可能能够在更短的时间内使用适当的索引运行第二个查询)。