Qwald: MySQL: DISTINCT bei 2 Spalten-Abfrage??

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

  1. 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

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. 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

  2. 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

  3. 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