Sohail: Select Distinct

Hallo,

ich habe da eine Frage.
Ich habe zwei Felder. Das erste Feld soll als Distinct ausgegeben werden.

Select Distinct Feld1,Feld2 From Tabelle Where...

Das funktioniert aber nicht.
Ich habe such so versucht:

Select Feld1,Feld2 From Tabelle Where... Group by Feld1,Feld2

Das funktioniert auch nicht.

Hat jemand eine Idee.

Danke
Sohail

  1. Hi Sohail

    Welche der zu Feld1 passenden Feld2 willst du denn haben?
    Das musst du schon spezifizieren und dann mit Group by auf
    Feld1 arbeiten. (MySQL hauts dir nicht um die Ohren afaik
    sondern gibt dir zufällig eins zurück). Verwende deswegen
    Agregate-Funktionen

    Select Feld1, agregatefunction(Feld2)
      from tabelle2
      where deine Bedingungen
      group by Feld1

    Gruss Daniela

    1. Hallo Daniela,

      Feld1 ist Name und Feld2 sind die DateiNamen. Die Namen kommen mehrmals vor mit verschiedenen DateiNamen.

      Select Name,Datei From pnamen Where Familie Like 'A%' Group by
      Familie

      Kannst du bitte mir da ein Beispiel bringen?

      Danke
      Sohail

      1. Halihallo Sohail

        Feld1 ist Name und Feld2 sind die DateiNamen. Die Namen kommen mehrmals vor mit verschiedenen DateiNamen.

        Select Name,Datei From pnamen Where Familie Like 'A%' Group by
        Familie

        Kannst du bitte mir da ein Beispiel bringen?

        SELECT DISTINCT Name, Datei FROM pnamen WHERE Familie LIKE 'A%' GROUP BY Name, Datei;

        Sucht alle Familien, deren Name mit 'A' anfangen und gibt die dazugehörigen Namen und Dateien aus; es ist zu beachten, dass Name und Datei als "Einheit" behandelt wird und nur unterschiedliche Records aus dieser "Einheit" ausgegeben werden.

        Viele Grüsse

        Philipp

        1. Hallo philipp,

          und was heisst das genau. Dass ich da keine Distinct bekommen kann?

          Sohail

          1. Halihallo

            und was heisst das genau. Dass ich da keine Distinct bekommen kann?

            Keine Distincts auf eine Spalte, ja, nur "globale distincts". Wenn du eineindeutige Spaltenwerte in einer Spalte haben willst, verwende einen GROUP BY.

            Viele Grüsse

            Philipp

      2. Hi Sohail

        Nein, du gehst nämlich genau wie beim letzten Mal meiner Frage aus dem
        Weg, es ist übrigens auch genau das selbe Problem wie beim letzten Mal.

        Falls du sowas haben willst:

        Name1 Datei1
              Datei2
              Datei3
        Name2 Datei4
              Datei5
        ...

        Gleich von Anfang weg, für die Ausgabeformatierung sind deine Scripte
        zuständig, nicht die Datenbank (gewisse der mächtigeren Datenbanken
        können das auch, ich nehme aber mal an, du benutzt MySQL oder sowas).
        In dem Fall müsstest du die Datenbank sortieren lassen nach Name und
        per Script dann immer wenn der Name identisch zu der vorherigen Zeile
        ist den Namen ausblanken.

        Wenn das nicht ist was du willst, gib bitte kleine Datenbestände an
        und die erwartete Ausgabe, du kannst nicht sagen, gib mir einen Namen
        nur einmal und dazu Datei wenn du nicht sagst welche der vielen
        möglichen Dateien.

        Gruss Daniela

        1. Hallo Daniela,

          ich gehe keinesfalls deiner Frage aus dem Weg. Ich weiss aber nicht ganz genau, was du da meinst.

          Meine Tabelle sieht so aus:

          Name   |  ID
          ----------------
          Sohail | 1
          Sohail | 2
          Sohail | 3
          Sohail | 4
          Andere1| 5
          Andere1| 6
          Andere2| 7
          Andere2| 8

          Ich brauche an dieser Stelle beide Felder und einer Distincten Ausgabe.

          Name   |  ID
          ----------------
          Sohail | 1
          Andere1| 5
          Andere2| 7

          Wie bekomme ich das raus?

          Danke
          Sohail

          1. Halihallo

            Ich brauche an dieser Stelle beide Felder und einer Distincten Ausgabe.

            Name   |  ID

            Sohail | 1
            Andere1| 5
            Andere2| 7

            Wie bekomme ich das raus?

            Das ist nicht Distinct, sondern GROUP BY Name. Wenn du auch alle IDs zu den Namen willst, einfach meine Variante für 100% Distincte Angaben, oder wenn das nicht so ne grosse Rolle spielt, bzw. implizit gegeben ist, ein einfacher SELECT Name, ID FROM ... ohne GROUP BY

            Viele Grüsse

            Philipp

          2. Hi Sohail

            Ich brauche an dieser Stelle beide Felder und einer Distincten Ausgabe.

            Name   |  ID

            Sohail | 1
            Andere1| 5
            Andere2| 7

            Mir fällt auf, du benutzt immer die niedrigste ID pro Benutzer, wenn das
            immer so sein soll, sag das der Datenbank einfach:

            Select Name, min(id)
              from tabelle
            [ where ...]
              group by Name
            [ order by ...]

            Where und order by und so ganz nach Geschmack wie immer anzuwenden, wichtig
            ist die Reihenfolge, nach Group by kommt nur noch ein allfälliges Having
            und/oder order by.

            Mit Group By sagst du, ich will alle Records die in allen danach
            angegebenen Feldern identisch sind, zusammengefasst haben.
            Nur darfst du für weitere nach dem Select angegebenen Werte keine
            unterschiedlichen Werte mehr kriegen sonst hauen dir das die meisten
            Datenbankmanagementsysteme um die Ohren.

            Da kommt jetzt min ins Spiel, das ist eine Agregationsfunktion und
            selektiert aus allen Zeilen der Gruppe die Zeile raus, welche in dem
            Fall die tiefste ID hat.

            Diese Diskusion hatten wir aber schonmal:
            http://forum.de.selfhtml.org/archiv/2002/7/17050/

            Gruss Daniela

            1. Hallo Daniela,

              vielen Dank nochmals für die damalige und Heutige Hilfe.

              Du weiss doch, wenn man mitten in Arbeit ist, vergisst man die einfachsten Sachen oder übersieht die einfach.

              Jedenfalls, muss es einen einfachen Weg für eine Distinct-Anweisung geben, wenn man mehr als ein Feld ausgeben will.

              Ich wünsche dir schönes Wochenende.

              Sohail

              1. Hi Sohail

                Jedenfalls, muss es einen einfachen Weg für eine Distinct-Anweisung geben, wenn man mehr als ein Feld ausgeben will.

                Nein, weil er keine Ratespielchen treibt welche Werte du gerne in den
                anderen Spalten haben möchtest. Entweder du gruppierst und definierst die
                zusätzlichen Spalten wie ich es dir gezeigt habe, oder du sagst,
                unterdrücke mir alles, was in allen! Spalten unterschiedlich ist.

                Oder du benützt MySQL wo du bei Gruppen mit Feldern im Select die nicht
                zur Gruppe gehören einfach zufällige Werte aus den möglichen Feldern
                kriegst (imho völlig falsche Lösung, MySQL sollte auch Fehler ausgeben,
                eine Datenbank darf nicht raten).

                Gruss Daniela