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