Rolf B: Query mysql

Beitrag lesen

Hallo Jörg,

wenn die Existenz garantiert ist, liefern JOIN und LEFT JOIN das gleiche Ergebnis. Der Unterschied kann in den Auswirkungen auf den Query Optimizer bestehen - bei einem JOIN kann er mit einer von beiden Tabellen anfangen, bei einem LEFT JOIN muss er "links" anfangen. Deswegen würde ich LEFT nur hinschreiben, wenn's wirklich nötig ist. Abgesehen davon könnte sich dein 2 Jahre älteres Ich oder sonstwer irgendwann fragen: Warum hab ich hier keinen inneren Join gemacht? KÖNNTE es sein, dass es zu einem Kundensatz keinen Stammsatz gibt? Grübel, denk, zeitverschwend…

Wenn ich nun in meiner Ergenbnismenge auch eine Spalte "letzter Auftrag" führen wollte, würde das gehen?

Klar. Aber wie? Kommt mal wieder drauf an.

Deine aktuell gezeigte Query ist sinnlos, denn die zeigt alle Kunden, die irgendwelche Aufträge haben. Ohne die Auftragsdaten dazu. D.h. es wird sicherlich eine Bedingung geben, die Aufträge filtert. Und nur zu den gefundenen Aufträgen willst Du Kundendaten sehen.

  • Warum ist da ein DISTINCT drin? Wenn der nötig ist, kann das auf eine suboptimale Query hinweisen.
  • Soll das Query-Ergebnis auch Werte aus der Auftragstabelle enthalten? Doch doch, das geht schon, du kannst 3 Aufträge zeigen und bei jedem das jüngste Datum. Aber muss das?
  • Mal angenommen, deine Auftragstabelle hat zum Kunden 12 die Aufträge 42, 97 und 119. Deine Filterbedingung findet die Aufträge 42 und 97, woraufhin Du den Kunden 12 als Queryergebnis bekommst. Aber welches maximale Auftragsdatum willst Du sehen? Vom #97? Oder vom #119?
_Rolf_

-- 
sumpsi - posui - obstruxi