LEFT JOIN Anfrage

Hallo Leute,

ich möchte gern eine LEFT JOIN Anfrage machen bei der nur die erste
Verknüpfung geliefert wird. habe bisher folgendes zustande bekommen:

SELECT S_kunde.*, S_kundenap.name
FROM S_kunde LEFT JOIN S_kundenap on (S_kundenap.idKD_FK = S_kunde.idKD)

Was fehlt hier noch?

Danke

Miro
ska [ Fr, 13 Juli 2007 12:07 ] [ ID #1767606 ]

Re: LEFT JOIN Anfrage

SKA wrote:
> SELECT S_kunde.*, S_kundenap.name
> FROM S_kunde LEFT JOIN S_kundenap on (S_kundenap.idKD_FK = S_kunde.idKD)
>
> Was fehlt hier noch?

mal LIMIT 0,1 probiert?

--
Testscript für RegEchsen:
http://diesundas.funzt-halt.net/regextest.php
Michael Ziegler [ Fr, 13 Juli 2007 12:18 ] [ ID #1767607 ]

Re: LEFT JOIN Anfrage

On Fri, 13 Jul 2007 12:07:24 +0200, SKA wrote:

> Hallo Leute,
>
> ich möchte gern eine LEFT JOIN Anfrage machen bei der nur die erste
> Verknüpfung geliefert wird. habe bisher folgendes zustande bekommen:
>
> SELECT S_kunde.*, S_kundenap.name
> FROM S_kunde LEFT JOIN S_kundenap on (S_kundenap.idKD_FK =
> S_kunde.idKD)
>
> Was fehlt hier noch?

LIMIT 1?

Was meinst du mit "erste Verknüpfung"?

Gibt es eine Sortierreihenfolge für die Zeilen aus S_kundenap? Und willst
du nur die Zeile die nach dieser Sortierung die erste wäre? Dann kannst
du einen doppelten LEFT JOIN benutzen:

SELECT
bla
FROM
tab1
LEFT JOIN
tab2 ON (bedingung)
LEFT JOIN
tab2 t2 ON (t2.sortFeld < tab2.sortFeld)
WHERE
t2.primary IS NULL

Björn
B.Steinbrink [ Fr, 13 Juli 2007 12:23 ] [ ID #1767608 ]

Re: LEFT JOIN Anfrage

Björn Steinbrink wrote:
> On Fri, 13 Jul 2007 12:07:24 +0200, SKA wrote:
>
>> Hallo Leute,
>>
>> ich möchte gern eine LEFT JOIN Anfrage machen bei der nur die erste
>> Verknüpfung geliefert wird. habe bisher folgendes zustande bekommen:
>>
>> SELECT S_kunde.*, S_kundenap.name
>> FROM S_kunde LEFT JOIN S_kundenap on (S_kundenap.idKD_FK =
>> S_kunde.idKD)
>>
>> Was fehlt hier noch?
>
> LIMIT 1?
>
> Was meinst du mit "erste Verknüpfung"?
>
> Gibt es eine Sortierreihenfolge für die Zeilen aus S_kundenap? Und willst
> du nur die Zeile die nach dieser Sortierung die erste wäre? Dann kannst
> du einen doppelten LEFT JOIN benutzen:
>
> SELECT
> bla
> FROM
> tab1
> LEFT JOIN
> tab2 ON (bedingung)
> LEFT JOIN
> tab2 t2 ON (t2.sortFeld < tab2.sortFeld)
> WHERE
> t2.primary IS NULL
>
> Björn

Also es gibt mehrere Übereinstimmungen die als Ergebnis geliefert werden.

Bsp.

Tabelle Kunde Tabelle Mitarbeiter

ID Name ID_FK MName Aktiv
1 A 1 X 1
2 B 1 Y 0
3 C 1 Z 0
4 D 2 XY 1

SELECT Kunde.*, Mitarbeiter.*
FROM Kunde LEFT JOIN Mitarbeiter on (Kunde.ID =
Mitarbeiter.ID_FK)

Liefert mir

Name MName
A X
A Y
A Z
B XY

Nun ich möchte nur die erste der A-Verknüpfung, also


Name MName
A X
B XY
ska [ Fr, 13 Juli 2007 12:32 ] [ ID #1767609 ]

Re: LEFT JOIN Anfrage

On Fri, 13 Jul 2007 12:32:15 +0200, SKA wrote:

> Björn Steinbrink wrote:
>> On Fri, 13 Jul 2007 12:07:24 +0200, SKA wrote:
>>
>>> Hallo Leute,
>>>
>>> ich möchte gern eine LEFT JOIN Anfrage machen bei der nur die erste
>>> Verknüpfung geliefert wird. habe bisher folgendes zustande bekommen:
>>>
>>> SELECT S_kunde.*, S_kundenap.name
>>> FROM S_kunde LEFT JOIN S_kundenap on (S_kundenap.idKD_FK =
>>> S_kunde.idKD)
>>>
>>> Was fehlt hier noch?
>>
>> LIMIT 1?
>>
>> Was meinst du mit "erste Verknüpfung"?
>>
>> Gibt es eine Sortierreihenfolge für die Zeilen aus S_kundenap? Und
>> willst du nur die Zeile die nach dieser Sortierung die erste wäre? Dann
>> kannst du einen doppelten LEFT JOIN benutzen:
>>
>> SELECT
>> bla
>> FROM
>> tab1
>> LEFT JOIN
>> tab2 ON (bedingung)
>> LEFT JOIN
>> tab2 t2 ON (t2.sortFeld < tab2.sortFeld)

Eek, dass muss natürlich sein:
tab2 t2 ON (t2.primary = tab2.primary AND ...)

>> WHERE
>> t2.primary IS NULL
>>
>
> Bsp.
>
> Tabelle Kunde Tabelle Mitarbeiter
>
> ID Name ID_FK MName Aktiv
> 1 A 1 X 1
> 2 B 1 Y 0
> 3 C 1 Z 0
> 4 D 2 XY 1
>
> SELECT Kunde.*, Mitarbeiter.*
> FROM Kunde LEFT JOIN Mitarbeiter on (Kunde.ID = Mitarbeiter.ID_FK)
>
> Liefert mir
>
> Name MName
> A X
> A Y
> A Z
> B XY
>
> Nun ich möchte nur die erste der A-Verknüpfung, also
>
>
> Name MName
> A X
> B XY

Quasi diejenige mit Aktiv = 1? Dann schreib das doch einfach mit in deine
Join-Bedingung.

Björn
B.Steinbrink [ Fr, 13 Juli 2007 13:38 ] [ ID #1767614 ]

Re: LEFT JOIN Anfrage

Björn Steinbrink wrote:
> On Fri, 13 Jul 2007 12:32:15 +0200, SKA wrote:
>
>> Björn Steinbrink wrote:
>>> On Fri, 13 Jul 2007 12:07:24 +0200, SKA wrote:
>>>
>>>> Hallo Leute,
>>>>
>>>> ich möchte gern eine LEFT JOIN Anfrage machen bei der nur die erste
>>>> Verknüpfung geliefert wird. habe bisher folgendes zustande bekommen:
>>>>
>>>> SELECT S_kunde.*, S_kundenap.name
>>>> FROM S_kunde LEFT JOIN S_kundenap on (S_kundenap.idKD_FK =
>>>> S_kunde.idKD)
>>>>
>>>> Was fehlt hier noch?
>>> LIMIT 1?
>>>
>>> Was meinst du mit "erste Verknüpfung"?
>>>
>>> Gibt es eine Sortierreihenfolge für die Zeilen aus S_kundenap? Und
>>> willst du nur die Zeile die nach dieser Sortierung die erste wäre? Dann
>>> kannst du einen doppelten LEFT JOIN benutzen:
>>>
>>> SELECT
>>> bla
>>> FROM
>>> tab1
>>> LEFT JOIN
>>> tab2 ON (bedingung)
>>> LEFT JOIN
>>> tab2 t2 ON (t2.sortFeld < tab2.sortFeld)
>
> Eek, dass muss natürlich sein:
> tab2 t2 ON (t2.primary = tab2.primary AND ...)
>
>>> WHERE
>>> t2.primary IS NULL
>>>
>> Bsp.
>>
>> Tabelle Kunde Tabelle Mitarbeiter
>>
>> ID Name ID_FK MName Aktiv
>> 1 A 1 X 1
>> 2 B 1 Y 0
>> 3 C 1 Z 0
>> 4 D 2 XY 1
>>
>> SELECT Kunde.*, Mitarbeiter.*
>> FROM Kunde LEFT JOIN Mitarbeiter on (Kunde.ID = Mitarbeiter.ID_FK)
>>
>> Liefert mir
>>
>> Name MName
>> A X
>> A Y
>> A Z
>> B XY
>>
>> Nun ich möchte nur die erste der A-Verknüpfung, also
>>
>>
>> Name MName
>> A X
>> B XY
>
> Quasi diejenige mit Aktiv = 1? Dann schreib das doch einfach mit in deine
> Join-Bedingung.
>
> Björn

Kommisch wie einfach:
SELECT Kunde.*, Mitarbeiter.*
FROM Kunde LEFT JOIN Mitarbeiter on (Kunde.ID = Mitarbeiter.ID_FK)
GROUP BY Kunde.ID
ska [ Fr, 13 Juli 2007 14:06 ] [ ID #1767617 ]

Re: LEFT JOIN Anfrage

"SKA" schrieb
[..]
> Kommisch wie einfach:
> SELECT Kunde.*, Mitarbeiter.*
> FROM Kunde LEFT JOIN Mitarbeiter on (Kunde.ID = Mitarbeiter.ID_FK)
> GROUP BY Kunde.ID

Was aber nur in MySQL geht und dir für Mitarbeiter.* ein
unbestimmtes Ergebnis bringt. Und wie es der Zufall will,
ergibt es bei Dir in dieser Konstellation das "richtige". Ich würde
an Deiner Stelle keine Daten mehr einfügen oder die Query
optimieren ;-)

Gruß
Andreas
Andreas Sakowski [ Fr, 13 Juli 2007 14:52 ] [ ID #1767618 ]

Re: LEFT JOIN Anfrage

Andreas Sakowski wrote:
> "SKA" schrieb
> [..]
>> Kommisch wie einfach:
>> SELECT Kunde.*, Mitarbeiter.*
>> FROM Kunde LEFT JOIN Mitarbeiter on (Kunde.ID = Mitarbeiter.ID_FK)
>> GROUP BY Kunde.ID
>
> Was aber nur in MySQL geht und dir für Mitarbeiter.* ein
> unbestimmtes Ergebnis bringt. Und wie es der Zufall will,
> ergibt es bei Dir in dieser Konstellation das "richtige". Ich würde
> an Deiner Stelle keine Daten mehr einfügen oder die Query
> optimieren ;-)
>
> Gruß
> Andreas
>
>

Hmm, habe die Query hierfür mal mit * abgekürzt. Die normale Query sieht
etwas anders aus.

;-) Dankeee
ska [ Fr, 13 Juli 2007 16:17 ] [ ID #1767625 ]

Re: LEFT JOIN Anfrage

"SKA" schrieb
> Andreas Sakowski wrote:
>> "SKA" schrieb
>> [..]
>>> Kommisch wie einfach:
>>> SELECT Kunde.*, Mitarbeiter.*
>>> FROM Kunde LEFT JOIN Mitarbeiter on (Kunde.ID = Mitarbeiter.ID_FK)
>>> GROUP BY Kunde.ID
>>
>> Was aber nur in MySQL geht und dir für Mitarbeiter.* ein
>> unbestimmtes Ergebnis bringt. Und wie es der Zufall will,
>> ergibt es bei Dir in dieser Konstellation das "richtige". Ich würde
>> an Deiner Stelle keine Daten mehr einfügen oder die Query
>> optimieren ;-)
>>
>> Gruß
>> Andreas
>>
>>
>
> Hmm, habe die Query hierfür mal mit * abgekürzt. Die normale Query
> sieht etwas anders aus.
>
> ;-) Dankeee

Hoffentlich hast Du nicht nur den * durch einen Spaltennamen ersetzt.
Denn
das ist nicht das Problem.
Andreas Sakowski [ Mo, 16 Juli 2007 12:05 ] [ ID #1769826 ]
Datenbanken » de.comp.datenbanken.mysql » LEFT JOIN Anfrage

Vorheriges Thema: Search without diacritics...
Nächstes Thema: max/min/mean: lieber Tabelle oder Spalte?