我有一个 SQL 脚本(目前针对 SQLite 运行,但它可能适用于任何数据库引擎)两次使用相同的子查询,并且因为它可能会获取大量记录(表有几百万行)我'我只想调用一次。
查询的缩短伪版本如下所示:
SELECT * FROM
([the subquery, returns a column of ids]) AS sq
[a couple of joins, that fetches things from other tables based on the ids]
WHERE thisorthat NOT IN ([the subquery again])
我尝试sq
以各种方式(带/不带括号,带/不命名 sq 列等)使用名称(),但无济于事。
我真的必须重复这个子查询吗?
澄清: 我在 python 和 sqlite 中做这个作为可以做什么的一个小演示,但我希望我的解决方案尽可能地扩展,尽可能少的修改。在实际情况下,数据库将有几百万行,但在我的示例中,只有 10 行带有虚拟数据。因此,可以很好地优化例如 MySQL的代码绝对足够好 - 它不必专门针对 SQLite进行优化。但正如我所说,需要的修改越少越好。