MySQL-Join
Tobi
- datenbank
-1 Alexander Brock0 Tobi
Hallo,
irgendwie steh ich grad aufm Schlauch.
Ich habe 2 Tabellen.
Die erste enthält eine ID, die jeweils nur einmal vorkommt.
die zweite enthält mehrere einträge mit der ID aus der 1. tabelle.
ich möchte jetzt die beiden miteinander verknüpfen, aber dabei nur 1 ergebnis für jede ID erhalten.
Es soll jede ID aus der 1. Tabelle mit dem aktuellsten Eintrag der 2. Tabelle verknüpft werden.
Mit GROUP BY bekomme ich jeweils nur einen eintrag, allerdings stimmt dann die verknüfung nicht, weil die einträge aus der 2. tabelle nicht sortiert werden (ORDER BY)?
Gibt es da einen passenden JOIN-Befehl?
Vielen Dank!
Hallo Freunde des gehobenen Forumsgenusses,
Die erste enthält eine ID, die jeweils nur einmal vorkommt.
die zweite enthält mehrere einträge mit der ID aus der 1. tabelle.ich möchte jetzt die beiden miteinander verknüpfen, aber dabei nur 1 ergebnis für jede ID erhalten.
Es soll jede ID aus der 1. Tabelle mit dem aktuellsten Eintrag der 2. Tabelle verknüpft werden.
select tabelle1.spalte, tabelle2.spalte from tabelle1 inner join tabelle2 on tabelle1.id = tabelle2.id
War es das, was du gesucht hast? Die Eingrenzung der Ergebnismenge mit on?
Gruß
Alexander Brock
Hallo,
nein, nicht ganz.
Die Verknüfung hatte ich soweit auch schon.
select tabelle1.spalte, tabelle2.spalte from tabelle1 inner join tabelle2 on tabelle1.id = tabelle2.id
hiermit bekomme ich mehrere Ergebnisse, wenn es in tabelle2 mehrere Einträge mit der gleichen id gibt.
Als Ergebnis möchte ich aber nur einen Eintrag.
Gruß Tobi
Hallo Freunde des gehobenen Forumsgenusses,
select tabelle1.spalte, tabelle2.spalte from tabelle1 inner join tabelle2 on tabelle1.id = tabelle2.id
hiermit bekomme ich mehrere Ergebnisse, wenn es in tabelle2 mehrere Einträge mit der gleichen id gibt.
Als Ergebnis möchte ich aber nur einen Eintrag.
Woran kannst du diesen Eintrag identifizieren?
Oder ist es egal, welcher das ist -> limit 1
Gruß
Alexander Brock
Hallo!
Woran kannst du diesen Eintrag identifizieren?
Oder ist es egal, welcher das ist ->limit 1
Nein, limit 1 funktioniert nicht, da ich ja in tabelle1 mehrere Einträge habe.
in tabelle2 gibt es tabelle2.datum, hiernach möchte ich gerne sortieren ORDER BY tabelle2.datum DESC
und nur den neuesten Eintrag verknüfen.
Wenn ich GROUP BY tabelle1.id
verwende, bekomme ich zwar jeweils nur 1 Ergebnis, aber tabelle2 wird nicht nach tabelle2.datum sortiert, sondern beliebig verknüpft.
Gruß und Danke für die Antworten!
Hallo Freunde des gehobenen Forumsgenusses,
Nein, limit 1 funktioniert nicht, da ich ja in tabelle1 mehrere Einträge habe.
Könntest du mal einen (Beispiel-)MySQL-Dump der beiden Tabellen zur Verfügung stellen? Ich hab da eine Idee, würde das aber gerne zuerst mal ausprobieren.
Gruß
Alexander Brock
Hallo,
Könntest du mal einen (Beispiel-)MySQL-Dump der beiden Tabellen zur Verfügung stellen? Ich hab da eine Idee, würde das aber gerne zuerst mal ausprobieren.
tabelle1
tabelle1
(id
int(10) unsigned NOT NULL auto_increment,bezeichnung
varchar(200) NOT NULL,id
)tabelle1
tabelle1
(id
, bezeichnung
) VALUES (1, 'Eintrag 1'),tabelle2
tabelle2
(id
int(10) unsigned NOT NULL auto_increment,tabelle1\_id
int(10) unsigned NOT NULL,bezeichnung
varchar(200) NOT NULL,id
)tabelle2
tabelle2
(id
, tabelle1\_id
, bezeichnung
) VALUES (1, 1, 'Eintrag nummer 1 in tabelle 2 mit tabelle1_id = 1'),yo,
ab mysql version 4.1 kannst du es mit korellierenden unterabfragen lösen.
select t1.spalte, t2.spalte
from tabelle1 AS t1
inner join tabelle2 AS t2
on t1.id = t2.id
WHERE t2.datum =
(
SELECT MAX(t3.datum) FROM tabelle2 AS t3 WHERE t3.id = t2.id
)
beim inner join ist noch zu beachten, dass es immer einen passenden datensatz (id) in beiden tabellen befinden muss.
Ilja
hallo,
ab mysql version 4.1 kannst du es mit korellierenden unterabfragen lösen.
geht leider nicht :( ist version 4.0.15...
trotzdem danke
tobi
yo,
dann kannst du zumindestenz die spalten der tabelle1 ausgeben und das datum von tabelle2.
select t1.*, MAX(t2.datum)
from tabelle1 AS t1
inner join tabelle2 AS t2
on t1.id = t2.id
GROUP BY t1.*
Ilja
Hallo,
dann kannst du zumindestenz die spalten der tabelle1 ausgeben und das datum von tabelle2.
select t1.*, MAX(t2.datum)
from tabelle1 AS t1
inner join tabelle2 AS t2
on t1.id = t2.id
GROUP BY t1.*
mmh, das Problem dabei ist, dass in tabelle2 noch mehr werte stehen die je nach datum auch unterschiedlich sind...
vielleicht fällt mir noch was ein...
trotzdem danke.
gruß Tobi
yo,
mmh, das Problem dabei ist, dass in tabelle2 noch mehr werte stehen die je nach datum auch unterschiedlich sind...
vielleicht fällt mir noch was ein...
das wird ohne unterabfragen sehr schwer werden. du musst auch bedenken, dass rein theoretisch maximale datumswerte auch gleich sein könnten. in prinzip sind es zwei schritte, die man tun muss:
1. bestimme den höchsten datumswert der jeweiligen id.
2. gebe mir den datenstz der tabelle zwei aus, welchen diesem maximalen datumswert entspricht (kann mehr als einer sein) und zusäztlich die informationen aus tabelle zwei.
damit wird auch schon deutlich, dass es quasi zwei abfragen sind. und ohne unterabfragen sehe ich auf den ersten blick keine möglichkeit.
Ilja