nur den ersten passenden Eintrag aus einem Join verwenden
nur den ersten passenden Eintrag aus einem Join verwenden
am 29.05.2006 18:55:19 von Manfred Bauer
vielleicht ist das obige ja am Ende ein Betreff, den ich finden würde,
wenn ich versuch die Fragestellung oder gar eine Antwort dazu bei Google
zu finden.
Also ich möchte Daten aus Tabelle a,
und dazu jeweils die Daten
der ersten Zeile aus b (b.feld1, b.feld2, b.preis) die einer Bestimmten
bedingung enstpricht ...
konkret: die einen Preis enthält, der größer ist als a.preis, wenn b
nach Preis sortiert wird.
Oder wie schaffe ich es, in die Tabelle b ein Feld: `ab_preis`
einzufügen, welches der Größte der kleineren bis_preise sein sollte.
Aber leider, ausser manuell hab ich keinen Dunst, wie das gehen sollte.
Bitte um Unterstützung ...
Manfred
Re: nur den ersten passenden Eintrag aus einem Join verwenden
am 29.05.2006 19:12:17 von Christian Kirsch
Manfred Bauer schrieb:
> vielleicht ist das obige ja am Ende ein Betreff, den ich finden würde,
> wenn ich versuch die Fragestellung oder gar eine Antwort dazu bei Google
> zu finden.
> Also ich möchte Daten aus Tabelle a,
> und dazu jeweils die Daten
> der ersten Zeile aus b (b.feld1, b.feld2, b.preis) die einer Bestimmten
> bedingung enstpricht ...
> konkret: die einen Preis enthält, der größer ist als a.preis, wenn b
> nach Preis sortiert wird.
>
> Oder wie schaffe ich es, in die Tabelle b ein Feld: `ab_preis`
> einzufügen, welches der Größte der kleineren bis_preise sein sollte.
>
> Aber leider, ausser manuell hab ich keinen Dunst, wie das gehen sollte.
>
> Bitte um Unterstützung ...
limit? Außerdem glaube ich mich erinnern zu können, dass zumindest
eine dieser sehr ähnliche Fragestellung im Tutorial diskutiert wird ->
dev.com.mysql/doc
Re: nur den ersten passenden Eintrag aus einem Join verwenden
am 29.05.2006 20:13:27 von Manfred Bauer
Manfred Bauer schrieb:
> Also ich möchte Daten aus Tabelle a,
> und dazu jeweils die Daten
> der ersten Zeile aus b (b.feld1, b.feld2, b.preis) die einer Bestimmten
> bedingung enstpricht ...
habe nun folg. ausgeknobelt, was die richtigen Ergebnisse liefert:
en Ergebnisse liefert:
SELECT a.*,
(SELECT b.id FROM b WHERE a.x <= b.y ORDER BY b.y LIMIT 0 , 1) AS bid
FROM a
Ein passendes Beispiel im Tutorial ... hab ich nicht gefunden.
Braucht halt Subselects, aber die hamma ja schon ;-)
Manfred
Re: nur den ersten passenden Eintrag aus einem Join verwenden
am 29.05.2006 20:52:57 von Thomas Rachel
Manfred Bauer wrote:
> habe nun folg. ausgeknobelt, was die richtigen Ergebnisse liefert:
> SELECT a.*,
> (SELECT b.id FROM b WHERE a.x <= b.y ORDER BY b.y LIMIT 0 , 1) AS bid
> FROM a
Ginge auch ohne Subselects (ich weià nicht, wie performant diese sind, und
es gibt sie auch noch nicht sonderlich lange):
SELECT a.*, b.id AS bid
FROM a
JOIN b ON a.x <= b.y
LEFT JOIN b AS b0 ON b.y < b0.y /* hier evtl. statt < auch > - hab die
Aufgabenstellung diesbezüglich nicht ganz verstanden */
WHERE b0 IS NULL;
sucht Dir die Zeile aus b, deren y >= des jeweiligen a.x ist und die keine
Zeile in b (oder b0) hat, deren y noch gröÃer (oder kleiner) ist.
(Kombination von ON ... und WHERE oben sorgt dafür...)
HTH,
Thomas