Preferirei fare un self-join su una tabella temporanea di una tabella derivata.
CREATE TEMPORARY TABLE foo AS SELECT ...;
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
Versus utilizzando una tabella derivata, in cui si deve scrivere l'intera query due volte:
SELECT ...
FROM (SELECT ...)
JOIN (SELECT ...) ON ...conditions...;
Ma un'altra soluzione è quella di utilizzare espressioni di tabella comuni che sono leggermente differenti da tabelle derivate:
WITH foo AS (SELECT ...)
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
Se si utilizza una marca di database che supporta questa sintassi (Microsoft, Oracle, IBM, PostgreSQL).
fonte
2010-07-31 00:52:02
Che [questione è aggiunto per SQL Server] (http : //stackoverflow.com/questions/2326395/which-one-have-better-performance-derived-tables-or-temporary-tables), quindi le informazioni dovrebbero essere considerate specifiche per esso e non per tutti i database. –