Ben: Abfrage ohne doppelte Werte ausgeben

Hallo!

Aus einer MySQL-Tabelle möchte ich die ersten 3 Meldungen auslesen. Dabei sollte jedoch jeder Name nur einmal vorkommen.

ID Name  Text
1 Albert ...
2 Bertram ...
3 Bertram ...
4 Caesar ...

Meine SQL-Abfrage lautet:
"SELECT Name,Text FROM Tabelle ORDER BY ID LIMIT 0,3"

Was muss geändert werden, damit als dritter Datensatz Caesar anstatt Bertram erscheint? Also ein SELECT DISTINCT für nur eine Tabelle und möglichst ohne Zwischenspeicherung in einem Aray o.ä...

Besten Dank im Voraus!
Ben

  1. Hallo Ben,

    Aus einer MySQL-Tabelle möchte ich die ersten 3 Meldungen auslesen. Dabei sollte jedoch jeder Name nur einmal vorkommen.

    Meine SQL-Abfrage lautet:
    "SELECT Name,Text FROM Tabelle ORDER BY ID LIMIT 0,3"

    SELECT DISTINCT Name, Text FROM Tabelle ORDER BY ID LIMIT 0,3;

    Viele Grüße aus Freiburg,
    Marian

    --
    Microsoft broke Volkswagen's world record: Volkswagen only made 22 million bugs!
    <!--[if IE]><meta http-equiv="refresh" content="0; URL=http://www.getfirefox.com"><[endif]-->
    Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) n4:( ss:) de:] js:| ch:? mo:} zu:)
    1. Hallo Marian!

      Besten Dank für Deine schnelle Antwort.

      SELECT DISTINCT Name, Text FROM Tabelle ORDER BY ID LIMIT 0,3;

      SELECT DISTINCT Name ... funktioniert wie gewünscht nur halt ohne Text,
      SELECT DISTINCT Name, Text ... bringt jedoch leider keinen Unterschied zu meiner Abfrage.

      Beste Grüße,
      Ben

    2. Hallo Marian,

      Aus einer MySQL-Tabelle möchte ich die ersten 3 Meldungen auslesen. Dabei sollte jedoch jeder Name nur einmal vorkommen.

      Meine SQL-Abfrage lautet:
      "SELECT Name,Text FROM Tabelle ORDER BY ID LIMIT 0,3"

      ID  Name     Text
      1   Albert   Bert
      2   Bertram  Bertie
      3   Bertram  Bert
      4   Caesar   Gaius Iulius

      SELECT DISTINCT Name, Text FROM Tabelle ORDER BY ID LIMIT 0,3;

      nein, diese Abfrage liefert _nicht_ das Gewünschte:
      Deine Abfrage liefert mit den Beispieldaten

      Name     Text
        -------  ------
        Albert   Bert
        Bertram  Bertie
        Bertram  Bert

      da der zweite und dritte Datensatz sich unterscheiden.
      Nein, ein GROUP BY Name hilft auch nicht, da das Ergebnis in der Spalte Text dann unvorhersagbar ist, wie sich im MySQL-Handbuch nachlesen lässt.

      Freundliche Grüße

      Vinzenz

  2. Hallo Ben,

    Aus einer MySQL-Tabelle möchte ich die ersten 3 Meldungen auslesen. Dabei sollte jedoch jeder Name nur einmal vorkommen.

    welche MySQL-Version? Ab 4.1 gibt es eine recht einfache Lösung mit einem Subselect, siehe http://forum.de.selfhtml.org/archiv/2006/3/t124769/#m804136

    Meine SQL-Abfrage lautet:
    "SELECT Name,Text FROM Tabelle ORDER BY ID LIMIT 0,3"

    Die ersten drei sind also die mit der niedrigsten ID.
    Du solltest die Lösung, die Du in dem von mir verlinkten Posting findest, leicht an Dein Problem anpassen können, die entsprechende MySQL-Version vorausgesetzt.

    Freundliche Grüße

    Vinzenz