Jörg: mysql: Join-Problem

Hallo,

ich habe eine Abfrage ala

select
k.Spalte,  
m.MID,
d.Termin
from table1 m
LEFT JOIN table2 k ON k.KID=m.KID 
LEFT JOIN table3 d ON m.MID=d.MID 
WHERE ...

Nun habe ich das Problem, dass Mehrfacheinträge ausgewiesen bekomme, weil in table3 (d) mehrere einträge vorhanden sind. (Durch table2 (k) kann das nicht passieren, weil in dieser Tabelle max 1 relevanter Eintrag stehen kann, das ist bei table3 anders)

Mich interessiert ohnehin nur der letzte (Termin)Eintrag aus table3 und vor allem will ich an dieser Stelle nicht die MID mehrfach in der Ergebnisliste haben, ganz egal, wieviele Einträge in table3 sind.

Wie kann ich das bewerkstelligen?

Gruß, Jörg

  1. Hallo,

    Wie kann ich das bewerkstelligen?

    Gegen Mehrfacheinträge hilft DISTINCT, aber ich hab grad nicht parat, ob man das auch bei Joins nimmt…

    Gruß
    Kalk

    1. Hi tabellenkalk,

      Gegen Mehrfacheinträge hilft DISTINCT, aber ich hab grad nicht parat, ob man das auch bei Joins nimmt…

      Leider hilft das hier nicht, das hatte ich schon versucht.

      Jörg

  2. Tach!

    Es gibt da eine Abfragetechnik, die sich Correlated Subquery nennt. So eine Subquery lässt sich genauer formulieren als eine Joinbedingung. Allerdings kann sie nur einen einzelnen Wert liefern.

    Mich interessiert ohnehin nur der letzte (Termin)Eintrag aus table3

    Wenn also das Datum reicht, dann kannst du mit MAX() den größten Wert liefern. Wenn du noch mehr Werte brauchst, muss es wohl beim Join bleiben. Allerdings kannst du auch eine Subquery joinen. Versuch dazu zuerst, die dritte Tabelle so zu befragen, dass du nur einen Datensatz pro Kriterium in der Ergebnismenge hast. Dazu wirst du vielleicht gruppieren wollen.

    P.S. DISTINCT zu verwerden ist meist ein Zeichen dafür, dass man die Bedingungen nicht genau genug formuliert hat und mit zu großen Datenmengen hantiert.

    dedlfix.

    1. Tach!

      Es gibt da eine Abfragetechnik, die sich Correlated Subquery nennt. So eine Subquery lässt sich genauer formulieren als eine Joinbedingung. Allerdings kann sie nur einen einzelnen Wert liefern.

      Mich interessiert ohnehin nur der letzte (Termin)Eintrag aus table3

      Wenn also das Datum reicht, dann kannst du mit MAX() den größten Wert liefern.

      Hallo dedlfix,

      danke für den Hinweis. So krieg ichs hin 😀

      Jörg