答案 0 :(得分:1)
范围可能是一个。我认为临时表可以被其他事务/进程等访问。派生表仅限于声明它们的块。
答案 1 :(得分:1)
我希望在临时表上执行自联接而不是派生表。
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)。
答案 2 :(得分:1)
如果您必须在多次查询中访问临时表中的数据,则避免重复生成临时数据可能成本更低:
CREATE TEMPORARY TABLE foo AS SELECT ...;
SELECT ... FROM foo WHERE ...conditions...;
-- sometime later
SELECT ... FROM foo WHERE ...different conditions...;