题
解决方案
我宁愿做一个 自加入 在临时表上,而不是派生表。
CREATE TEMPORARY TABLE foo AS SELECT ...;
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
与使用派生表,您必须在其中编写整个查询两次:
SELECT ...
FROM (SELECT ...)
JOIN (SELECT ...) ON ...conditions...;
但是另一个解决方案是使用 通用表表达式 与派生表略有不同:
WITH foo AS (SELECT ...)
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
前提是您使用支持该语法的数据库(Microsoft,Oracle,IBM,PostgreSQL)。
其他提示
范围可能是一个。我认为可以使其他交易 /流程等可以访问临时表。派生表仅限于声明的块。
如果您必须访问临时表中的数据 多个查询 避免重复生成温度数据可能会降低成本:
CREATE TEMPORARY TABLE foo AS SELECT ...;
SELECT ... FROM foo WHERE ...conditions...;
-- sometime later
SELECT ... FROM foo WHERE ...different conditions...;
不隶属于 StackOverflow