Announcement

Collapse
No announcement yet.

Verschachtelte SQL Abfragen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Verschachtelte SQL Abfragen

    Hallo Gemeinde - Frohes Neues Jahr!

    ich stehe (mal wieder) vor einer verschachtelten SQL Notwendigkeit und möchte nicht mehr das Problem selber posten und dann eine Lösung zusamenfummeln, sondern möchte lieber lernen wie ich es allgemeingültig abhandeln kann - das hilft allen besser :-) (Guter Vorsatz)

    Ich möchte für einen speziellen Kunden eine besondere Ausgabe erstellen, er will :

    Rechnungsköpfe komplett, Kundendaten und dann noch die einzelnen Positionen der Rechnung - das ganze dann elektronisch - also in einer Tabelle.

    Ich habe das ganze aktuell schmatisch so gelöst :

    Code:
    SELECT ... 
    FROM [KopfTabelle-Rechnungsdaten AS R], [KopfTabelle-Kundendaten AS K] WHERE R.Kundennummer = K.Kundennummer 
    AND ...
    GROUP BY ...
    ORDER BY ...
    So erhalte ich eine gute Ausgabe aller Kunden und Rechnungsköpfe.
    Teil 1 erledigt.

    Nun muss (oder darf) ich aber zusätzlich aus einer dritten (und wahrscheinlich vierten) Tabelle noch inhaltliche Daten ausgeben, welche natürlich nur in Bezug auf die Kopfdaten anfallen.

    Ich muss also verschachteltes SQL anwenden.

    Wie mache ich das ganze GRUNDSÄTZLICH - ich habe das ganze nie wirklich gelernt, SQL aus dem Studium und alle Fragen aus Büchern und Foren zusammengeführt, verschachteltes SQL habe ich nie wirklich verstanden und ich wäre SEHR FROH wenn mir jemand etwas seiner kostbaren Zeit widmen könnte.

    Ich denke es geht so :

    -> Meine Abfrage oben ist zweitrangig und muss verschachtelt werden, d.h.

    Code:
    SELECT <einzelneArtikelDaten> 
    FROM <Artikeldatenbank und Lieferscheinen>
    WHERE <verschachtelte SQL Abfrage nach den einzelnen Kopfdaten>
    ...
    Ich verstehe die Grundlage (hoffe ich) - weiss aber nicht wie ich sie WIRKLICH anwenden soll, also was wichtig ist und was verstanden sein muss...

    Ich sage DANKE vorweg!

    LG Stefan
    --
    Administrator mit Debian (Samba,Motion,HA-Cluster,Corosync,MsSQL,Asterisk,Nagios,Hylafax) Windows Server (MS SQL 2005,Project,Exchange)

  • #2
    In dem ersten Select (KopfRechnung und KopfKunden) ist das Group By vermutlich überflüssig (Kann man nur genau sagen, wenn auch die Select Clause angegeben ist).
    Es wird nur verwendet, um Daten einer/mehrerer Datenquellen zu aggregieren. Dein Select stellt sie aber einfach nebeneinander (denormalisiert), also wird in der Ausgabe zu jedem Rechnungskopf der zugehörige Kundenkopf gelistet. Es erscheinen folglich n Rechnungen und zugehörige Kundenkopfdaten mehrfach.

    Für die Detailpositionen der Rechnung kannst Du analog vorgehen. Die Frage ist aber, in welcher Form Du das präsentieren willst. Tatsächlich in einer Tabelle? Es kämen alle Rechnungspositionen hinzu, folglich würden sich nicht nur die Kundenkopfdaten, sondern auch die Rechnungsköpfe wiederholen.

    Mit dieser Darstellung werden u.U. große Mengen an Daten mehrfach wiedergegeben (Kopfdaten). Das ist evtl. praktisch, um in einer Tabelle bequem zu filtern oder sortieren, aber nicht unbedingt Resourcen schonend.

    Wie soll sich die "eine Tabelle" dem Kunden darstellen? In einer Programmmaske, als Export, als Report, ..?
    Gruß, defo

    Comment

    Working...
    X