Announcement

Collapse
No announcement yet.

Join + nur einen Treffer der Untertabelle

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

  • Join + nur einen Treffer der Untertabelle

    Hallo,

    ich habe zwei Tabellen -> "Haupt" und "Unter".
    In Haupt habe ich ID und Name.
    In Unter habe ich ID, Haupt_ID, Text.

    So jetzt möchte ich das alle Einträge aus Haupt ausgeben werden und dazu über die ID/Haupt_ID EIN Eintrag aus der Unter Tabelle dazu gezogen wird - welcher Eintrag ist eigentlich egal.

    Also Bspl:
    Haupt -> 1 / Hans ; 2 / Peter; 3 /Uli
    Unter -> 1 / 1 / Text 1; 2 / 1 / Text 2

    Rauskommen soll:
    1 / Hans / Text 1
    2 / Peter /
    3 / Uli /

    Bei mir kommt jetzt aber immer raus:
    1 / Hans / Text 1
    1 / Hans / Text 2
    2 / Peter /
    3 / Uli /


    Hier meine Abfrage dazu:
    SELECT Haupt.ID, Haupt.Name, Unter.ID, Unter.Haupt_ID, Unter.Text
    FROM Unter
    RIGHT JOIN Haupt ON Unter.[Haupt_ID] = Haupt.ID


    Wie bekomme ich es hin, das ich mein Wunschergebnis erreiche?

    Danke für die Hilfe!

  • #2
    Wenn es egal ist, welches "Unter"Element, könntest Du mit einer Aggregat Funktion (min, max, ) dir je Fremdschlüssel einen "Unter" satz raussuchen und den dann ins Ergebnis einbinden.
    Alternativ vielleicht mit Rank die Untersätze ranken und ich einem Select dann auf rank = 1 filtern.
    Vielleicht gibt es auch noch andere gute Ansätze. Kommt auch sicher auch auf die MSSQL Version an, kenn mich da nicht so aus.
    Gruß, defo

    Comment


    • #3
      [HIGHLIGHT="SQL"]
      WITH Haupt
      AS ( SELECT * FROM (VALUES ( 1, 'Hans'), (2, 'Peter'), (3, 'Uli')) AS X(Id,Name))
      , Unter
      AS ( SELECT * FROM (VALUES ( 1, 1, 'Text 1'), (2, 1, 'Text 2')) AS Y (Id, Haupt_ID, Text))
      SELECT H.Id, H.Name, U.Id, U.Haupt_ID, U.Text
      FROM Haupt AS H
      LEFT JOIN ( SELECT TOP 1 U.Id, U.Text, U.Haupt_ID
      FROM Unter AS U
      ) AS U ON U.Haupt_ID = H.Id [/HIGHLIGHT]

      Comment


      • #4
        Ah, Top geht auch im Subselect, das war mir nicht klar!
        Gruß, defo

        Comment


        • #5
          Super, danke! Ich habs mit MAX gemacht - dass das so einfach sein kann :-).

          bye

          Comment


          • #6
            Originally posted by samke View Post
            Super, danke! Ich habs mit MAX gemacht - dass das so einfach sein kann :-).
            Ich würde das TOP von ebis vorziehen. Eine Aggregat Funktion ist höchst wahrscheinlich resourcenhungriger als das Top.
            Im Kleinen wahrscheinlich nicht spürbar, bei großen Datenmengen kann es deutliche Auswirkungen haben.
            Gruß, defo

            Comment

            Working...
            X