Announcement

Collapse
No announcement yet.

Join oder Union?

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

  • Join oder Union?

    Hallo Leute,

    ich habe folgendes Problem:
    Habe eine Tabelle Kunde mit Kundendaten.

    In einer zweiten Tabelle werden die Kinder eines Kunden aufgelistet, mit Fremdschlüssel zur Kundennummer.

    In einer dritten Tabelle wird das Einkommen für ein bestimmtes Jahr gespeichert, wieder mit Bezug auf die Kundennummer.


    Angenommen, zum Kunde Meier sind ein Kind und 5 Einkommensdatensätze gespeichert und ich hole mir die Daten so heraus:

    Code:
    select k1.kunden_nr, ek.jahreseinkommen, kid.vorname
    from kunde k1
    LEFT OUTER JOIN einkommen ek ON (ek.kunden_nr = k1.kunden_nr)
    LEFT OUTER JOIN kind kid ON (kid.kunden_nr = k1.kunden_nr)
    Dann bekomme ich 5 Zeilen mit den unterschiedlichen Einkommensdatensätzen, und in all den Zeilen steht 5-mal dasselbe Kind, obwohl es das nur einmal in der Datenbank gibt. Nun denk mein Programm, Meier hat 5 Kinder...
    Ich möchte also, dass bei den restlichen Zeilen das Kind null ist.

    Ich schätze mal, das geht mit dem Join gar nicht, weil es doch ein Kreuzprodukt der Tabellen ist, richtig?
    Oder muss ich da wirklich zuerst den Kunden mit den Kindern Joinen, anschließend per Union mit dem Einkommen verbinden? Oder gibt es vielleicht eine andere Lösung?

    Danke!
    Andy

  • #2
    Hallo Andy,

    dein Programm könnte z.B. auch anhand einer Kind-ID erkennen, daß es sich bei den % Kindern um ein und dasselbe, also nur eins handelt.
    Das gleiche Problem hast du ja auch andersherum, bei 5 Kindern und einem Einkommensdatensatz. Hier sollte man also besser über das WIE der Abfrage nachdenken. Ist es sinnvoll die Kinder mit dem Einkommen zu Joinen oder wären zwei getrennte Abfragen besser - einmal die Kinder, einmal das Einkommen.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo Falk!
      Danke für deine Antwort!

      Du hast Recht, eine gute Möglichkeit wäre, im Programm zu prüfen, ob ich das aktuelle Kind mit der jeweiligen ID schon aufgenommen habe.

      Wenn ich es nicht Joine und die Abfragen trenne, bekomme ich etwas mehr Abfragen, da dies hier nur ein Ausschnitt war. Müsste also für jeden Kunden ca. 5-6 Abfragen machen. Dazu kommt, dass ich die Kunden mit den Kindern in einer Liste darstellen möchte. Wenn ich jetzt deinen Vorschlag annehme, und die Abfragen aufteile, hole ich mir zuerst alle Kunden aus der DB. Anschließend alle Kinder. Die muss ich aber im Programm wiederum den Kunden zuordnen, was ich mir etwas aufwändig vorstelle...

      Comment


      • #4
        Hallo Andy,

        den Aufwand wirst du in irgendeiner Form haben, entweder du holst die Daten am Stück und mußt sie im Programm strukturieren oder du holst die Daten strukturiert und zeigst sie im Programm in einfachen Listen an. Je nach verwendeter Programmiersprache gibt es da Zugriffskomponenten die das ganze ziemlich vereinfachen und automatische Master-Detail-Beziehungen anzeigen.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment

        Working...
        X