4 messages in com.mysql.lists.mysql-deRe: Probleme bei einer Query| From | Sent On | Attachments |
|---|---|---|
| Tim | 14 Nov 2006 04:31 | |
| Felix Antonius Wilhelm Ostmann | 14 Nov 2006 05:38 | |
| Daniel Penning | 14 Nov 2006 06:28 | |
| Tim | 15 Nov 2006 06:46 |
| Subject: | Re: Probleme bei einer Query![]() |
|---|---|
| From: | Felix Antonius Wilhelm Ostmann (ostm...@os3.com) |
| Date: | 11/14/2006 05:38:05 AM |
| List: | com.mysql.lists.mysql-de |
Ich glaube ne richtig tolle Lösung gibt es da nicht, hatte vor längerer Zeit auch einmal ein ähnliches Problem und konnte es leider nur "schwammig" lösen.
Ich meine das ich es über Subselects gelöst hatte und mit der Performance sehr unzufrieden war und derzeit das anders aufbaue: Ich hab eine Tabelle_current und eine Tabelle_archive, immer wenn ich neue Daten bekomme haue ich sie in archive rein und in current rein, wobei ich in current halt überschreibe.
Das mit den Subselect sah ca. so aus:
SELECT * FROM t1 LEFT JOIN t2 t1.id=t2.foreign_id AND t2.status = (SELECT MAX(status) FROM t2 AS tegal WHERE tegal.foreign_id=t2.foreign_id)
Bin mir da aber gerade überhaupt nicht sicher :( kann auch sein das ich es über HAVING gemacht habe? *grübel* Naja, vielleicht gibts hier ja nen schlauen Kopf, der weiß wie es "richtig" geht :)
MfG Felix Antonius Wilhelm Ostmann
Tim schrieb:
Hallo zusammen,
ich habe doch noch mal ein Problem mit einer SQL-Query und wollte mal höflich nachfragen, ob mir da vielleicht jemand auf die Sprünge helfen kann.
Also ich habe zwei Tabellen, die in einer 1:n Beziehung stehen. In der N-Tabelle befinden sich Datensätze, die einen aufsteigenden Status besitzen. Ein Beispiel:
1-Tabelle: id data1 data2 ...
1 xxx nnn 2 nnn fff
N-Tabelle: if foreign_id status [...]
1 1 1 2 1 2 3 1 3 4 2 1 5 2 2
In der N-Tabelle gibt es also einen maximalen Status von 3 für 1-Datensatz mit ID 1 und einen maximalen Status von 2 für den 1-Datensatz mit der ID 2
Was ich nun schon länger versuche, ist eine Join-Verknüpfung aufzusetzen, die mir jeweils immer nur die Daten für den maximalen Status rauswirf.
Also
SELECT 1-Tabelle.* FROM 1-Tabelle as A INNER JOIN 2-Tabelle as B ON A.id = B.foreign_id -> Holt mir alle Datensätze und zeigt einzelne Zeilen aus der 1-Tabelle mehrfach an
SELECT 1-Tabelle.* FROM 1-Tabelle as A INNER JOIN 2-Tabelle as B ON A.id = B.foreign_id GROUP BY A.id -> Zeigt die Daten der 1-Tabelle nur einmal an, hat aber die Inhalte der N-Tabelle mit dem niedrigsten Status, was ich aber gerade nicht brauche...
Wie also könnte ich die Query so umschreiben, dass ich immer nur die Daten der N-Datensätze mit dem jeweils maximalsten Status bekomme?
Liebe Grüße Tim




