yo,
Wie kann ich eine MySQL-Abfrage gestalten, damit unabhängig von Joins und Where-Bedingungen die Resultate nur einmal vorkommen?
das mit DISTINCT war schon der richtige ansatz, nur dass das distinct immer nur dann wirksam wird (doppelte datensätze rausfiltert), wenn --> alle <-- spalten des jeweiligen datensatzes mit einem schon vorhanden übereinstimmen. ist der datensatz auch in nur einer spale mit einem anderen inhalt bedacht, dann greift distinct nicht. insofern ist es nicht möglich, distinct über nur eine ausgewählte spalte laufen zu lassen, sondern es ist alles oder nichts.
die frage ist nun, was du als doppelte datensätze ansiehst...
Gebe mir alle Datensätze der "grossen" Tabelle,
Jeder Datensatz darf nur einmal vorkommen.
dafür brauchst du keinen join über die kleinen tabellen, wenn es dir darum geht, nur jeden datensatz der grossen tabelle einmal auszugeben. nicht mal distinct ist dafür von nöten. willst du alle datensätze der grossen tabelle und zusätzlich informationen der kkleinen tabelle über joins, dann kann du nur die schon angesprochenen aggregat-funktionen mit ins boot nehmen, wie zum beispiel COUNT(). du müsstest quasi ein group by über alle spalten der grossen tabelle machen, die du ausgeben willst, plus dem COUNT(). versuchst du andere informationen der kleinen tabellen mitzunehmen, dann kann es sein, dass ein datensatz der grossen tabelle mehreren datensätze der kleinen tabelle zugeordnet wird. und für welchen der werte, soll sich die abfrage den entscheiden ?
man könnte bei entsprechendem dbms auch ein wenig tricksen und unterabfragen mit ins spiel bringen.....
Ilja
Ich versuchte SELECT DISTINCT(a.id)...
Aber auch da bekomme ich Datensätze mehrfach zurück.Gruss
Schorsch