dedlfix: mysql: SUM und DISTINCT

Beitrag lesen

Tach!

Wie ermittel ich jetzt, woher die unnötigen Datensätze stammen?

Das musst du anhand deiner konkreten Daten machen. Du wirst dazu nachvollziehen müssen, was das DBMS im Falle der jeweiligen Joins draus macht. Nimm nicht nur EK in die Ausgabe sondern alle Felder der Tabellen, also t1.,t2.,...

Siehe EN-Wikipedia-Artikel Correlated subquery, das letzte Beispiel im ersten Teil (vor Optimizing ...)

Habe ich mir angesehen. Bekomme ich aber nicht auf mein Beispiel angewendet.

Du musst deine Abfrage teilen. Der eine Teil muss von t1 die IDs liefern

SELECT MID FROM t1 WHERE MID=4711;

Der zweite muss aus t4 die Summe liefern

SELECT SUM(EK) FROM t4 WHERE t4.MID=4711;

Und das verknotest du nun zu einer Query

SELECT MID, (SELECT SUM(EK) FROM t4 WHERE t4.MID = t1.MID) SumEK FROM t1 WHERE MID=4711;

Die Correlation ist dabei, dass in der Subquery mit t1.MID auf das ein Feld der äußeren Query zugegriffen wird. Für jeden Datensatz der Ergebnismenge der äußeren Query wird die Subquery aufgerufen. Das geht aber so nur, wenn du aus t4 nur einen einzigen Wert bekommen möchtest.

dedlfix.