I 4 Fragen haben, beginnt jeweils mit einem CTE:Wie erhalten Sie das Ergebnis mit einer einzigen CTE?
with stg as
(
select columns
from stage
where conditions1
)
dies Nachdem die Unterschiede beginnen. Im ersten Fall muss ich mich mit 2 Tabellen unter bestimmten Bedingungen verbinden.
In zweiter. Ich muss table2 beitreten, aber auf verschiedenen Bedingungen
select cols
from stg
inner join table2 on cond5
where cond6
Im dritten, ich brauche einfach alle Spalten, die
select cols
from stg
where cond7
passen cond7 Und in der vierten, wieder andere Tabelle und cond
select cols
from stg
left join table3 on cond8
where cond9
Die Sache ist, nach jeder Abfrage muss ich geänderte Daten zurück einfügen. Es ist im Grunde
insert into table stage
select *
from query(1-4)
Also kann ich diese CTEs nicht verketten. Und nach jedem Einfügen gibt der CTE weniger Zeilen zurück. Zum Beispiel
Zum ersten Mal gibt es 100 Zeilen, Sekunde 85 und so weiter. Was ich will ist, den CTE nur einmal zu benutzen. Zuerst dachte ich, über das Ändern alle Join nach links, und fügte hinzu, sie zu dem CTE selbst und die Schaffung einer Flagge von Sorten
with stg as
(
select
cols,
table1.col as flag1,
table2.col as flag2,
table3.col as flag3
from
stage
left join
table1 on cond
left join
table2 on cond
left join
table3 on cond
where
many conditions
)
Aber das erwies sich als sehr chaotisch, sehr schnell und nicht einmal richtig arbeiten. Dann habe ich überlegt, es tatsächlich zu verketten und dann 4 CTEs zu verbinden, um loszuwerden, wenn sie verdoppelt werden, wenn sie existieren. Aber auch das scheint keine kluge Wahl zu sein. Gibt es noch andere Varianten?
Zum Schließen geschlossen. Diese Frage ist ein Durcheinander. Was hat der Einsatz von CTE mit Dubletten in Ihren Ergebnissen zu tun? Wickeln Sie es in eine Unterabfrage ein und verwenden Sie distinct –
Ihre Beispiele sind zu abstrakt und beleuchten Ihr Problem nicht viel. Realistischere Abfragen mit Beispieldaten wären hilfreich. –