With Queries

Kampfgummibaerlie

Datenbank-Guru
Beiträge
728
Nachdem ich mich mit kurzem auch mit Subquerys ganz gut auskenne, würde ich mich gerne auch mit den With-Querys auseinandersetzen.

Falls ich tatsächlich noch irgendwann SQL-Lehrer werden sollte, werde ich oft auf ungenauigkeiten zeigen, wie dass es später wichtig ist, die Spalten mit Tabellennamen zu selecten.

Was ich mir auch denken würde wäre, dass ich den Leuten direkt von Anfang an beibringe, anhand von Subquerys zu selecten. (Oder braucht das so hart viel Leistung vom Server?)

Sprich eher so nach dem Motto:
Code:
select (select maschinentypen.typ), (select maschinentypen.preis) from maschinentypen;

Weil, wenn ich ehrlich sein darf, mir wurde es nicht so präsentiert, und es musste mir von daher später noch explizit erklärt werden :D

Aber zurück zum Thema With-Queries:
Ich habe keine Ahnung, wie das in der Theorie funktionieren sollte, beziehungsweise in der Praxis angewandt werden soll. Habe heute noch was vor, würde mich freuen, wenn ich heute gleich mehrere Dinge lernen darf :D

20:00 Kaffee wird gebraut ;) (bin, um ehrlich zu sein am überlegen, ob mit oder ohne koffeein)

Und, wenn ich ehrlich sein darf, das Arbeiten mit Apache OpenOffice SQL hätte ich mit Garantie nicht bis jetzt verfolgt, sondern kurzerhand an die Wand geschmissen (ja, ich hätte die Installationsdatei auf eine CD gebrannt, und gegen die Wand geschmissen (seelisch)), und bin euch allen Dankbar, dass ihr, wenn auch ab und zu mit einem Stolperer, ich glaube aber, aus meiner eigenen Dummheit entstanden, ganz zufrieden mit meiner Leistung seit ;)
 
Werbung:
Sodala, habe mich heute Abend noch mit dem Ganzen beschäftigt, habe mich ein wenig gespielt, am Ende versucht Akretschmers Link zu verfolgen, und ein wenig auf meine Vorstellungen anzupassen.

Problem ist jetzt jedoch, er hat eine nicht tolerierbare Ladezeit.
Ist das bei solchen Querys immer eher der Fall?

Mein Code sieht so aus:
Code:
with recursive enthaltene_teile (ganzes_teil, teil, menge) as (
select endprodukt, teilname, menge from materialien
union all
select materialien.endprodukt, materialien.teilname, materialien.menge*enthaltene_teile.menge
from enthaltene_teile, materialien
)
select teil, sum(menge) as gesamtmenge from enthaltene_teile group by teil;
 
Problem ist jetzt jedoch, er hat eine nicht tolerierbare Ladezeit.
Ist das bei solchen Querys immer eher der Fall?

Über welche Datenmengen und Zeiten reden wir? Was sagt EXPLAIN ANALYZE dazu?

Und ja: CTE-Abfragen tendieren dahin, langsam zu sein. PostgreSQL's CTEs are optimisation fences | Es gibt Diskussionen, das zu verbessern. Viele nicht-rekursive CTE's lassen sich umschreiben und sind dann schneller, bei rekursiven Abfragen wird das schwer.
 
Werbung:
Habe mich Gestern nur dumm gespielt, heute liefs wieder (mit händisch schnell geschriebenem Code)
Mir ist eingefallen, dass man eine recursive Query auch vollständig ohne Tabellen schreiben kann.

Mir fällt anbei auch auf, dass ein Union einfach nur mehrere Werte in eine Spalte vereinigt.

Oder bin ich mal wider auf einer falschen Spur gelandet?

Hier der Code:
Code:
with recursive teile (a, b, c) as (
   select (select 1 as a), (select 2 as b), (select 3 as c)
   union all
   select (select 4 as d), (select 5 as e), (select 6 as f)
   )
select a, b, c from teile;

Resultat:
a | b | c
---+---+---
1 | 2 | 3
4 | 5 | 6
(2 rows)

Ich glaube, ich habe aus Eifer den Faden verloren, was ich eigentlich damit erreichen wollte. ^^
 
Zurück
Oben