MySQL: DISTINCT bei 2 Spalten-Abfrage??
Qwald
- datenbank
0 Rouven0 Vinzenz Mai0 Ilja
Hallo,
also ich habe eine Tabelle:
id, userid, text
Daten:
1, 1, Hallo Welt
2, 3, Beispiel
3, 2, Moin Moin
4, 1, Noch ein Datensatz
So jetzt möchte userid und text ausgeben, allerdings soll userid nur 1 mal Ausgegeben werden:
userid, text
1, Hallo Welt
3, Beispiel
2, Moin Moin
Hmm dachte ich mir ganz einfach:
SELECT DISTINCT userid, text FROM tabelle;
Allerdings erhalte ich als Ausgabe:
1, Hallo Welt
3, Beispiel
2, Moin Moin
1, Noch ein Datensatz
Wenn ich 'text' aus der Abfrage entferne, funktioniert es einwandfrei.
Sobald ich aber mehrere Spalten abfrage, wird mir die gesamte Tabelle ausgegeben.
Wie kann ich das jetzt lösen, hab im Manual nichts dazu gefunden unter DISTINCT?
Grüße
Qwald
Hi,
du hast nichts unter DISTINCT gefunden, weil es alleine nicht ausreicht deine Anforderungen zu erfüllen. Du hast seine Wirkung bereits bemerkt: Es eliminiert doppelte Datensätze, nicht doppelte Spalteneinträge. Ein Datensatz bei deiner Select-Klausel oben sind genau alle Spalten die du abfragst, wenn du also userid, text abfragst, möchtest du alle Datensätze haben, die sich in mindestens einer der Spalten unterscheiden.
Gegenfrage: Wonach hast du (im Hinblick auf: woran soll das DBMS) entschieden, dass "Hallo Welt" im Ergebnis vorkommt, "Noch ein Datensatz" aber nicht?
MfG
Rouven
Hallo Rouven,
Gegenfrage: Wonach hast du (im Hinblick auf: woran soll das DBMS) entschieden, dass "Hallo Welt" im Ergebnis vorkommt, "Noch ein Datensatz" aber nicht?
Diese Frage kommt mir bekannt vor. *bg*
Ich hätte mir mein Posting sparen können, hätte ich vor dem Posten die Forumshauptdatei aktualisiert :-)
Freundliche Grüße
Vinzenz
Hallo
id, userid, text
1, 1, Hallo Welt
2, 3, Beispiel
3, 2, Moin Moin
4, 1, Noch ein Datensatz
So jetzt möchte userid und text ausgeben, allerdings soll userid nur 1 mal Ausgegeben werden:
userid, text
1, Hallo Welt
3, Beispiel
2, Moin Moin
Warum genau diese Datensätze, warum nicht
userid text
---------------------------
3 Beispiel
2 Moin Moin
1 Noch ein Datensatz
Welche Logik führt Dich auf Dein Ergebnis und schließt das von mir angegebene aus. Meine Lösung gibt jede userid auch nur einmal aus.
Wie kann ich das jetzt lösen, hab im Manual nichts dazu gefunden unter DISTINCT?
Und wenn Dein oben angegebenes Ergebnis dasjenige ist, was Deine (bisher unbekannte) Logik ermittelt, dann kann es von Deiner MySQL-Version abhängen, ob es eine einfache Lösung gibt.
Freundliche Grüße
Vinzenz
yo,
Wie kann ich das jetzt lösen, hab im Manual nichts dazu gefunden unter DISTINCT?
mit distinct wird das meines wissens auch nicht möglich sein. wenn deine version von mysql unterabfragen kann, dann sollte es gehen.
SELECT tab1.userid, tab1.text
FROM tabelle AS tab1
WHERE tab1.id IN
(SELECT MIN(tab2.id) FROM tabelle AS tab2 GROUP BY tab2.userid)
Ilja