Ich würde lieber eine Self-Join auf eine temporäre Tabelle als eine abgeleitete Tabelle tun.
CREATE TEMPORARY TABLE foo AS SELECT ...;
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
Versus eine abgeleitete Tabelle verwenden, in dem Sie die gesamte Abfrage zweimal schreiben:
SELECT ...
FROM (SELECT ...)
JOIN (SELECT ...) ON ...conditions...;
Aber eine andere Lösung ist allgemeine Tabellenausdrücke zu verwenden, die von abgeleiteten Tabellen leicht unterschiedlich sind:
WITH foo AS (SELECT ...)
SELECT ... FROM foo f1 JOIN foo f2 ON ...conditions...;
Vorausgesetzt, Sie verwenden eine Datenbankmarke, die diese Syntax unterstützt (Microsoft, Oracle, IBM, PostgreSQL).
Die [Frage für SQL Server markiert ist] (http : //stackoverflow.com/questions/2326395/which-one-have-better-performance-derived-tables-orternet-tables), daher sollten die Informationen als spezifisch für sie betrachtet werden und nicht für alle Datenbanken. –