common-table-expression

___ tag123sql ___ Structured Query Language (SQL) ist eine Sprache für die Abfrage von Datenbanken. Fragen sollten Codebeispiele, Tabellenstruktur, Beispieldaten und ein Tag für die verwendete DBMS-Implementierung (z. B. MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 usw.) enthalten. Wenn sich Ihre Frage nur auf ein bestimmtes DBMS bezieht (verwendet bestimmte Erweiterungen / Funktionen), verwenden Sie stattdessen das Tag des DBMS. Antworten auf mit SQL gekennzeichnete Fragen sollten den ISO / IEC-Standard SQL verwenden. ___ answer30078770 ___

Möglicherweise keine. Oracle ist zu vielen algebraischen Transformationen in der Lage, bevor die Abfrage tatsächlich optimiert wird. Wahrscheinlich werden beide Abfragen auf die gleiche Weise ausgewertet (sie haben den gleichen Ausführungsplan).

    
___ qstnhdr ___ Unterschied zwischen WITH-Klausel und Unterabfrage? ___ tag123oracle ___ Oracle Database ist ein Datenbankmanagementsystem mit mehreren Modellen, das von Oracle Corporation erstellt wurde. Verwenden Sie dieses Tag NICHT für andere Produkte von Oracle wie Java und MySQL. ___ answer30078783 ___

Die %code% -Klausel gilt auch für Unterabfrage-Factoring bekannt als allgemeine Tabellenausdrücke oder CTEs:

  

Mit der Klausel WITH query_name können Sie einem Unterabfrageblock einen Namen zuweisen. Sie können dann auf den Unterabfrageblock mehrere Stellen in der Abfrage verweisen, indem Sie query_name angeben. Oracle Database optimiert die Abfrage, indem der Abfragename entweder als Inline-Ansicht oder als temporäre Tabelle behandelt wird.

In Ihrem zweiten Beispiel ist das, was Sie %code% genannt haben, eine Inline-Ansicht, keine temporäre Tabelle.

In vielen Fällen hängt die Auswahl, die Sie verwenden müssen, von Ihrem bevorzugten Stil ab, und CTEs können Code besser lesbar machen, insbesondere mit mehreren Ebenen von Unterabfragen (die Meinungen variieren natürlich). Wenn Sie nur auf die CTE / Inline-Ansicht verweisen, werden Sie wahrscheinlich keinen Unterschied in der Leistung feststellen, und der Optimierer kann den gleichen Plan haben.

Sie sind jedoch besonders nützlich, wenn Sie die gleiche Unterabfrage an mehreren Stellen verwenden müssen, z. B. in einer Union. Sie können eine Inline-Ansicht in ein CTE ziehen, so dass der Code nicht wiederholt wird, und der Optimierer kann ihn materialisieren, wenn er dies für vorteilhaft hält.

Zum Beispiel dieses erfundene Beispiel:

%Vor%

könnte umgestaltet werden auf:

%Vor%

Die Unterabfrage muss nicht mehr wiederholt werden. Je komplizierter der wiederholte Code ist, desto vorteilhafter ist es aus Sicht der Wartung, einen CTE zu verwenden. Und je teurer die Unterabfrage ist, desto mehr Leistungsvorteile können Sie durch die Verwendung eines CTE erzielen, obwohl der Optimierer in der Regel ziemlich gut darin ist, herauszufinden, was Sie ohnehin tun.

    
___ qstntxt ___

Was ist der Unterschied zwischen %code% -Klausel und Unterabfrage?

%Vor%     
___ tag123commonableexpression ___ Ein allgemeiner Tabellenausdruck (CTE) ist eine temporäre Ergebnismenge, die innerhalb des Ausführungsbereichs einer einzelnen SELECT-, INSERT-, UPDATE-, DELETE- oder CREATE VIEW-Anweisung definiert ist. ___ tag123subquery ___ "Unterabfrage" ist vage SQL-Terminologie, die verwendet wird, um zu beschreiben, wann mehr als eine SELECT-Anweisung in einer Abfrage oder in DML-Anweisungen (IE: DELETE, UPDATE, INSERT, MERGE) verwendet wird. . Die SELECT-Anweisung der Unterabfrage wird immer in Klammern / Klammern gefunden. ___
2
Antworten

Permutation über rekursives CTE im SQL Server erstellen?

Betrachten Sie: %Vor% Ich kann eine Permutationstabelle für alle 3 Werte erstellen: %Vor% Dies nutzt die Macht des kartesischen Produkts von SQL und eliminiert gleiche Werte. OK. Aber ist es möglich, diesen rekursiven Pseudo-CT...
22.07.2015, 06:36
4
Antworten

Warum Oracle connect by mit nocycle ist, folgt dem Wurzelzyklus

Weiß jemand, warum Oracle weiterhin einem Pfad folgt, der über eine zyklische Schleife hinausgeht, wenn der Zyklus am obersten Knoten (Stammknoten, der direkt mit dem Stammknoten verbunden ist) stattfindet? Noch wichtiger, wie kann man das verhi...
20.09.2013, 21:31
2
Antworten

Gibt es eine logisch äquivalente und effiziente Version dieser Abfrage ohne Verwendung eines CTE?

Ich habe eine Frage zu einem postgresql 9.2-System, das ungefähr 20s in seiner normalen Form benötigt, aber nur ~ 120ms benötigt, wenn ein CTE verwendet wird. Ich habe beide Abfragen aus Gründen der Kürze vereinfacht. Hier ist die normale...
10.07.2013, 23:20
2
Antworten

hierarchische Summe in PostgreSQL

Dies ist eine vereinfachte Version eines Problems in PostgreSQL. Ich habe die folgende Tabelle A : [ID INTEGER | VALUE NUMERIC (10,2) | PARENT INTEGER ] Dabei ist 'PARENT' eine auf sich selbst verweisende FK zur Spalten-ID...
02.11.2012, 08:40
1
Antwort

Verwenden Sie mehrere CTE

Kann nicht herausfinden, wie man mehrere CTE verwendet Dies schlägt fehl %Vor% Das funktioniert - aber das ist nicht was ich brauche %Vor% Die echte Syntax war eine Join to row_number () Partition Ich habe gerade eine abgeleitete Tab...
20.09.2013, 19:50
1
Antwort

SQL Server MERGE + Beitreten zu anderen Tabellen

Ich verwende die MERGE-Anweisung innerhalb eines Datenbankprojekts, um Referenzdaten aus einer statischen Wertemenge zu füllen, z. B. die folgenden: %Vor% Das Problem tritt auf, wenn ich die sekundäre Tabelle basierend auf Inhalt in anderen...
09.05.2012, 19:30
2
Antworten

erstellen while-Schleife mit cte

wie sql Server Cte aus einer while-Schleife erstellt wird Meine Schleife wie diese %Vor%     
17.10.2012, 07:22
3
Antworten

Wie wähle ich nur die Zeile mit der maximalen Sequenz, ohne eine Unterabfrage zu verwenden?

Ich versuche nur die Zeile mit dem höchsten Seq für jede ID auszuwählen %Vor% Dies scheint zu funktionieren %Vor% Aber ist das der beste Weg, der einzige Weg? Ich mag es nicht, Unterabfragen zu verwenden, wenn ich nicht muss, und ich eri...
31.10.2012, 08:22
1
Antwort

SQL Server CTE, auf den in Self-Joins verwiesen wird, langsam

Ich habe eine Tabellenwert-UDF geschrieben, die mit einem CTE beginnt, um eine Teilmenge der Zeilen aus einer großen Tabelle zurückzugeben. Es gibt mehrere Joins im CTE. Ein paar innere und eine linke verbinden sich mit anderen Tabellen, die nic...
16.06.2010, 15:39
2
Antworten

SQL Server-Leistung: abgeleitete Tabelle vs. allgemeiner Tabellenausdruck (CTE)

Gibt es einen Leistungsgewinn bei Verwendung eines CTE über eine abgeleitete Tabelle?     
20.11.2008, 19:03