Announcement

Collapse
No announcement yet.

LEFT JOIN

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

  • LEFT JOIN

    Hallo,
    ich versuche, über einen Join 2 Tabellen zu verknüpfen.
    Tabelle 1 uadresse mit PK uadrnr
    Tabelle 2 uanschr FK uadrnr.
    select * from ustamm.uadresse, ustamm.uanschr
    where uadresse.uadrnr(+)=uanschr.uadrnr

    Soweit i.O.
    Aber in Tabelle 2 gibt es zu jeder uadrnr mehrere Datensätze, die sich durch ein Feld ukrz unterscheiden.

    Tabelle 1
    uadrnr = 1, name = 'Meier'
    Tabelle 2
    uadrnr = 1, ukrz = 'HAUS', strasse = 'Meierstrasse'
    uadrnr = 1, ukrz = 'POST', strasse = '12 34 500'
    Jetzt möchte ich aus Tabelle 2 die Strasse mit auflisten (ukrz='HAUS')
    select * from ustamm.uadresse, ustamm.uanschr
    where uadresse.uadrnr(+)=uanschr.uadrnr
    and uanschr.ukrz='HAUS'
    liefert mir aber weniger Datensätze als in Tabelle 1.
    Wahrscheinlich fehlen die, wo es in Tabelle 2 keinen Eintrag von ukrz='HAUS' gibt.
    Wo liegt der Fehler?
    Gruß, Frank

  • #2
    Hallo Frank,

    <hr noshade size="1">
    <cite>Wahrscheinlich fehlen die, wo es in Tabelle 2 keinen Eintrag von ukrz='HAUS' gibt.</cite>
    <hr noshade size="1">
    Genau da liegt das Problem, mit dem ...and uanschr.ukrz='HAUS' ... machst du den OUTER-Join wieder zum INNER-Join. Ein ...and uanschr.ukrz(+)='HAUS' bringt dich auch nicht weiter, damit bekommst du zwar jetzt die die gar keinen Eintrag in Tabelle2 haben, aber die mit "nur" ukrz = 'POST' immer noch nicht.
    Am einfachsten geht es über eine InSelect-View:
    SELECT *
    FROM ustamm.uadresse,
    (SELECT * FROM ustamm.uanschr
    WHERE uanschr.ukrz='HAUS') InView
    WHERE uadresse.uadrnr(+)=InView.uadrnr

    Gruß Fal
    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,
      est einmal vielen Dank für die Hilfe.
      Die InSelect View ist für mich neu. Erfolgsbericht kann ich noch nicht geben, da ich erst am Montag wieder bei der betreffenden Firma bin.
      Werde dann auf jeden Fall noch mal posten.<BR>
      Gruß, Fran

      Comment


      • #4
        Ich denke, dass ich das Problem evtll. ungenau beschrieben habe.
        In Firebird würde der Select wie folgt funktionieren:
        <CODE>
        select
        a.adrid
        , a.name
        , h.land as land
        , h.ort as ort
        , h.strasse_pf as strasse
        , p.land as postfach_land
        , p.ort as postfach_ort
        , p.strasse_pf as postfach
        from adresse a,
        left join anschrift h on (h.adrid=a.adrid and h.krz='HAUS')
        left join anschrift p on (p.adrid=a.adrid and p.krz='POST')
        </CODE>
        Fran

        Comment


        • #5
          Hallo Frank,

          dann versuch es doch bei ORACLE mal so:

          <p>SELECT *
          FROM adresse a,
          anschrift h,
          anschrift p
          WHERE h.adrid(+) = a.adrid
          and h.krz(+) = 'HAUS'
          and p.adrid(+) = a.adrid
          and p.krz(+) = 'POST'</p>

          Gruß Fal
          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


          • #6
            Danke Falk, werd ich versuchen.
            Fran

            Comment


            • #7
              Hallo Falk,
              leider gibt mir der Select immer noch zu wenig Daten zurück.
              Alle Adressen, die keinen Eintrag in UAnschr mit ukrz='HAUS' haben, fehlen.
              <CODE>
              select * from ustamm.uadresse a,
              (select * from ustamm.uanschr h where h.ukrz='HAUS') haus
              where a.uadrnr(+)=haus.uadrnr
              </CODE>
              Es muss doch mit Oracle (Version 8) ein left outer join hinzukriegen sein!
              Heul :-(

              Fran

              Comment


              • #8
                Kennt wirklich niemand den korrekten Syntax, ich bin nur ab und zu in der Firma...
                Bin für jeden Tip dankbar!
                Fran

                Comment


                • #9
                  Hi Falk,

                  Entwarnung, ich h atte das (+) auf der falschen Seite, sorry....

                  Fran

                  Comment


                  • #10
                    ...ich bin mir auch nicht immer sofort sicher auf welche Seite das (+) nun muß ;
                    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