作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个查询,我想存储它,例如:
SET @v1 := (SELECT * FROM users);
SELECT @v1;
在某些情况下,此查询会非常复杂(大量联接、聚合等),有时我需要执行完全相同的查询,但添加了 WHERE
子句(该查询将给出前一个查询的子集)。像这样的东西:
SELECT * FROM users WHERE isAdmin = true
我不想再次执行查询,我想使用上一个查询的结果(这样我就可以跳过再次执行又长又复杂的查询),类似于(这不起作用):
SELECT * FROM @v1 WHERE isAdmin = true
我该怎么做?
最佳答案
我唯一能想到的就是使用 TEMPORARY TABLE (仅对当前 session 可见)例如
create temporary table v1 (index (isAdmin)) as
(
select *
from users
);
然后您可以从此临时表中执行选择:
select * from v1 where isAdmin=true;
当然,如果查询很复杂并且需要很长时间执行,但它只返回很少的记录,那么这可能是一个好主意。否则,它可能比执行两次原始查询更昂贵(优化器可能能够使用适当的索引在更短的时间内运行第二个查询)。
关于mysql - 存储结果的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39998446/
我是一名优秀的程序员,十分优秀!