このSOの投稿では、派生テーブルと一時テーブルに関するパフォーマンスの利点について詳しく説明しています。
パフォーマンス以外に、派生テーブルが適切でない状況が存在します。
例を含む投稿ごとに1つの回答が役立ちます。
このSOの投稿では、派生テーブルと一時テーブルに関するパフォーマンスの利点について詳しく説明しています。
パフォーマンス以外に、派生テーブルが適切でない状況が存在します。
例を含む投稿ごとに1つの回答が役立ちます。
スコープは1つかもしれません。一時テーブルは他のトランザクション/プロセスなどにアクセスできるようにできると思います。派生テーブルは、それらが宣言されているブロックに限定されます。
派生テーブルよりも一時テーブルで自己結合を実行したいと思います。
CREATE TEMPORARY TABLE foo AS SELECT ...;
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
派生テーブルを使用する場合とは異なり、クエリ全体を2回記述する必要があります。
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...;