LEFT JOIN Anfrage

LEFT JOIN Anfrage

am 13.07.2007 12:07:24 von ska

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

Re: LEFT JOIN Anfrage

am 13.07.2007 12:18:18 von Michael Ziegler

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

Re: LEFT JOIN Anfrage

am 13.07.2007 12:23:31 von B.Steinbrink

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

Re: LEFT JOIN Anfrage

am 13.07.2007 12:32:15 von ska

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

Re: LEFT JOIN Anfrage

am 13.07.2007 13:38:19 von B.Steinbrink

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

Re: LEFT JOIN Anfrage

am 13.07.2007 14:06:38 von ska

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

Re: LEFT JOIN Anfrage

am 13.07.2007 14:52:15 von Andreas Sakowski

"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

Re: LEFT JOIN Anfrage

am 13.07.2007 16:17:13 von ska

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

Re: LEFT JOIN Anfrage

am 16.07.2007 12:05:23 von Andreas Sakowski

"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.