SQL Wie nach left join nur jede erste Zeile pro ID ausgeben?

1 Antwort

Es ist an sich ja richtig, dass der Eintrag mehrfach vor kommt, aber ich denke das weißt du ja.

Eine Lösung für dein Problem wäre z.B. eine Gruppierung:

SELECT t1.ID, t1.Name, COUNT(t2.ID) As AnzahlAufgaben
FROM tabelle1 t1
LEFT JOIN tabelle2 t2
ON t1.ID = t2.ID
GROUP BY t1.ID, t1.Name

Solltest du jedoch jetzt pro Zeile die Aufgaben wissen wollen, wäre das eine andere Geschichte.


nightheart1704 
Beitragsersteller
 01.04.2015, 15:07

danke für deine Antwort, ich will jedoch nicht die Anzahl der Aufgaben pro Person, sondern jeweils die erste Aufgabe namentlich darin stehen haben und die restlichen sollen im Resultat nicht angezeigt werden. Das ist nur ein Beispiel, eventuell nicht das Beste, meine eigentliche Konstruktion ist jedoch komplexer und da empfand ich so ein kleines Beispiel als überschaubarer.

Trotzdem nochmal Danke =)

0
KnusperPudding  01.04.2015, 15:20
@nightheart1704

Verstehe, den 'Ersten Wert'. Das ist in der Regel ja garnicht mal so leicht. 

Angenommen es sind 3 Tabellen:

Personen: wie deine Personen. (PersonID, PersonName)


PersonenAufgaben: Die Zwischentabelle mit den Relationen (PersonID, AufgabenID)


Aufgaben: Aufgaben (AufgabenID, AufgabeText)

Dann kannst du das so lösen, mit hilfe eines SubSelects im Join:

SELECT t1.PersonID, t1.PersonName, 
t3.AufgabeText
FROM Personen t1
LEFT JOIN
   (Select PersonID, 
    MIN(AufgabenID) As AufgabenID 
    FROM PersonenAufgaben) t2
ON t1.PersonID = t2.PersonID
INNER JOIN
Aufgaben t3
ON t2.AufgabenID = t3.AufgabenID


Indem du die Zwischentabelle gruppierst, hast du genau hier die Option zu sagen: nur den Ersten wert (Also der niedrigste Wert = MIN) aus der Aufgaben-Tabelle.

0