Announcement

Collapse
No announcement yet.

Problem mit Outer Join

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

  • Problem mit Outer Join

    Tabellen:

    table "subscriptions" (pk_subscription ist schlüssel):

    pk_subscription name
    --------------- ----
    1 abc
    2 abc
    3 abc
    4 def
    5 def

    table "login" (pk_subscription ist schlüssel):

    pk_subscription login_name
    --------------- ------
    1 xyz


    Query:
    select a.name, b.login_name
    from subscriptions a, login b
    where a.pk_subscription = b.pk_subscription (+)
    and a.name = 'abc'

    Problem:
    Ich möchte einen join über 2 tabellen machen, bei dem nicht sichergestellt ist, ob ein passendes tupel in der 2. tabelle gefunden werden kann.
    Wird kein Tupel gefunden, soll einfach null angehängt werden, weshalb ich einen outer join verwende. jedoch möchte ich als resultet nur ein tupel haben.
    momentan liefert obrige query:
    name login_name
    ---------- -----------
    abc xyz
    abc null
    abc null


    gewünscht von mir wäre jedoch nur:
    name login_name
    ---------- -----------
    abc xyz


    wird kein tupel in der login tabelle gefunden werden z.b. bei name='def' liefert die query
    name login_name
    ---------- -----------
    def null
    def null

    gewünscht wäre jedoch:
    name login_name
    ---------- -----------
    def null


    weiss jemand eine Lösung, wie die Query umgebaut werden muss?
    vielen Dank!
    Zuletzt editiert von humpa17; 17.07.2008, 09:14.

  • #2
    select a.name, b.login_name
    from subscriptions a
    left outer join login b
    on a.pk_subscription = b.pk_subscription
    where a.name = 'abc'
    docendo discimus

    Comment


    • #3
      Originally posted by frauwue View Post
      select a.name, b.login_name
      from subscriptions a
      left outer join login b
      on a.pk_subscription = b.pk_subscription
      where a.name = 'abc'
      diese query bezweckt das gleiche, wie meine query aus dem ersten post. oben hatte ich nur den oracle syntax für den left outer join verwendet. anstelle des left outer schreibt man dort einfach ein (+) hinter dem verbundsattribut. unsere beiden querys sind aber absolut äquivalent und können das problem nicht lösen.

      Comment


      • #4
        Versuch es mal mit distinct

        Comment


        • #5
          Hallo,

          ein einfaches DISTINCT wird nicht helfen. Jenachdem welcher Wert bei Mehrfachtreffern angezeigt werden soll, könnte man eine gruppierte Abfrage mit MIN() bzw. MAX() verwenden.
          [highlight=sql]
          select a.name, max(b.login_name)
          from subscriptions a, login b
          where a.pk_subscription = b.pk_subscription (+)
          and a.name = 'abc'
          group by a.name
          [/highlight]

          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


          • #6
            Hi,

            ich habe das gestern irgendwie falsch verstanden. Du willst also, wenn
            es kein Login gibt zu name einmal das Name mit Null haben, Und wenn es
            eins gibt dann nur das.

            select a.name, b.login_name
            from subscriptions a , login b
            Where a.pk_subscription = b.pk_subscription
            AND a.name = 'abc'
            UNION select
            select a.name, NULL
            from subscriptions a
            where
            a.name = 'abc'
            AND
            not exists
            ( Select * from login b where a.pk_subscription = b.pk_subscription)

            Gruß
            docendo discimus

            Comment


            • #7
              mit der gruppierung geht es. danke euch!

              Comment


              • #8
                Hi,

                falls Du aber gleiche Namen mit unterschiedlichen Logins hast, wird es mit Group by falsch.

                Gruß
                docendo discimus

                Comment


                • #9
                  Originally posted by frauwue View Post
                  Hi,

                  falls Du aber gleiche Namen mit unterschiedlichen Logins hast, wird es mit Group by falsch.

                  Gruß
                  ja, da hast du recht.
                  bei mir hat jeder name allerdings entweder keinen oder nur einen login, weshalb ich ich group by hierfür etwas schöner finde.
                  trotzdem auch nochmal danke für deine hilfe

                  Comment

                  Working...
                  X