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.