Als «cte» getaggte Fragen

Akronym für Common Table Expression. Temporäre, wiederverwendbare Unterabfrage, die rekursiv sein kann.


1
Welche Regeln bestimmen, wann SQL Server einen CTE als „Optimierungszaun“ verwendet?
Vor einiger Zeit veröffentlichte Brent Ozar einen Beitrag, in dem einige der Unterschiede zwischen SQL Server und PostgreSQL beschrieben wurden: Zwei wichtige Unterschiede zwischen SQL Server und PostgreSQL Der erste Punkt („CTEs sind Optimierungszäune“) ist mir aufgefallen, da es offensichtlich ist, dass SQL Server im bereitgestellten Beispiel den CTE und …


1
CTE: Holen Sie sich alle Eltern und alle Kinder in einer Aussage
Ich habe dieses funktionierende CTE-Beispiel. Ich kann alle Großeltern und alle Kinder auswählen. Aber wie kann ich alle Großeltern und alle Kinder in einer Aussage auswählen? In diesem Beispiel möchte ich Großvater, Vater, Sohn als Ausgabe, wenn ich "Vater" als Eingabe gebe. Ich benutze PostgreSQL. Aber ich denke, diese Frage …

5
Unterschied zwischen Inline-Ansicht und WITH-Klausel?
In Inline-Ansichten können Sie aus einer Unterabfrage auswählen, als wäre es eine andere Tabelle: SELECT * FROM /* Selecting from a query instead of table */ ( SELECT c1 FROM t1 WHERE c1 > 0 ) a WHERE a.c1 < 50; Ich habe gesehen, dass dies mit verschiedenen Begriffen bezeichnet …

2
Warum verwendet dieser rekursive CTE mit einem Parameter keinen Index, wenn er mit einem Literal arbeitet?
Ich verwende einen rekursiven CTE für eine Baumstruktur, um alle Nachkommen eines bestimmten Knotens im Baum aufzulisten. Wenn ich einen Literalknotenwert in meine WHEREKlausel schreibe , scheint SQL Server den CTE tatsächlich nur auf diesen Wert anzuwenden, wodurch ein Abfrageplan mit geringen tatsächlichen Zeilenzahlen usw. erstellt wird : Wenn ich …


3
Verwenden eines CTE in IF EXISTS Query
Ist es möglich, in SQL Server 2012 etwas Ähnliches wie das Folgende zu tun? IF EXISTS ( WITH DATA AS ( SELECT *, ROW_NUMBER() OVER(PARTITION BY column ORDER BY Column) AS rn FROM table ) SELECT * FROM DATA WHERE rn = 2 ) BEGIN ... END Ich habe versucht, …
8 sql-server  cte 


1
Warum ist CTE offen für verlorene Updates?
Ich verstehe nicht, was Craig Ringer meinte, als er kommentierte: Diese Lösung kann verloren gehen, wenn die Einfügetransaktion zurückgesetzt wird. Es wird nicht überprüft, ob das UPDATE Zeilen betrifft. unter https://stackoverflow.com/a/8702291/14731 . Bitte geben Sie eine Beispielsequenz von Ereignissen an (z. B. Thread 1 macht X, Thread 2 macht Y), …

1
Rekursive CTE-Leistung
Benötigen Sie Hilfe bei der rekursiven CTE-Leistung? Unterhalb läuft CTE sehr langsam, da versucht wird, heirarchische Daten rekusiv abzurufen. Die Tabelle ist groß, wobei jede Root-ID bis zu 3 rekursive Element-IDs enthält. Es könnten ungefähr 200000 oder mehr Root-IDs vorhanden sein. Ich weiß, dass rekursive CTEs für große Datenmengen langsam …

4
Wie oft läuft ein CTE?
Wenn ich einen Cte wie den folgenden Code habe. Wie oft wird der Tisch abgefragt? Ich hatte den Eindruck, dass es nur einmal aufgerufen und im Speicher gespeichert wurde, aber einige meiner Abfragen, die ich ausgeführt habe, scheinen viel länger zu laufen, als sie sein sollten. Was mich glauben lässt, …


2
Einfaches SQL CTE-Update
Ich bin ein wenig ratlos über dieses CTE-Update: DECLARE @a TABLE (ID int, Value int); DECLARE @b TABLE (ID int, Value int); INSERT @a VALUES (1, 10), (2, 20); INSERT @b VALUES (1, 100),(2, 200); WITH cte AS ( SELECT * FROM @a ) UPDATE cte SET Value = b.Value …

2
CTE-Spalte verursachte einen Überlauf - Nur Bestellen nach!
;WITH cte_Date ( DateCode_FK ) AS ( SELECT DATEADD( DAY, 1 - ROW_NUMBER() OVER ( ORDER BY so1.object_id ), GETDATE() ) FROM sys.objects so1 CROSS APPLY sys.objects so2 ) SELECT TOP 10 d.DateCode_FK FROM cte_Date d ORDER BY d.DateCode_FK DESC; Keine übermäßig interessante Abfrage, aber ich erhalte eine Fehlermeldung, wenn …
7 sql-server  cte 

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.