mysql: Join-Problem
Jörg
- mysql
0 Tabellenkalk0 Jörg
0 dedlfix0 Jörg
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
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
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
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.
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