Eddie: Select distinct .... order by ...

Hallo allerseits,

folgender SQL-Befehl tut erstaunlicherweise nicht was ich erwarte:

"SELECT DISTINCT a.value FROM db1 a, db2 b
FROM ...
ORDER BY b.id ASC"

Auf diese Art bekomme ich die Einträge aus a geordnet nach b (PERFEKT !!!) aber nicht DISTINCT.
Ordne ich nach a (was ich aber nicht will), dann geht's (DISTINCT und geordnet).

Keine Ahnung, woran das liegt, darum vielen Dank für Eure Hilfe,

Eddie

  1. Hi Eddie,

    "SELECT DISTINCT a.value FROM db1 a, db2 b
    FROM ...

    genau hier würde die Information stehen, wie Du die beiden Tabellen JOINst ... und zu welchem Zeitpunkt wieviele Werte welcher Art aus welcher Tabelle vorhanden sind.

    Ich fürchte, Du wirst das komplette Statement liefern müssen, damit man Dein Problem analysieren kann.

    Viele Grüße
          Michael

    --
    T'Pol: I apologize if I acted inappropriately.
    V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
    1. Hi Michael,
      also vollständig würde das Ganze dann ungefähr so aussehen.
      Eine Verknüpfung über 3 Tabellen:

      $reiseberichtNr = 5;

      "SELECT DISTINCT c.name
      FROM countries c, kapitel k, countr_rel_kap rel
      WHERE k.reiseberichtID = $reiseberichtNr
      AND k.id = rel.kapitelID
      AND rel.countryMnemonic = c.mnemonic
      ORDER BY k.date ASC"

      Ich will also von 10 Reiseberichts-Kapiteln die bereisten Länder ausgeben, und zwar in der chronologischen Reihenfolge, jedoch ohne Wiederholungen (z.B. bei 2 Kapiteln über Ägypten).

      Hast Du 'ne Idee?

      Eddie

      1. Hallo,

        Ich will also von 10 Reiseberichts-Kapiteln die bereisten Länder ausgeben, und zwar in der chronologischen Reihenfolge, jedoch ohne Wiederholungen (z.B. bei 2 Kapiteln über Ägypten).

        Dadurch, daß Wiederholungen auftreten können, ist es auch möglich, daß diese unterschiedliche Werte in k.date stehen haben. Wie soll nun das DBMS herausfinden welcher dieser Werte der gewünschte ist?

        Hast Du 'ne Idee?

        Ich würde das ganze nicht mit distinct[1], sondern mit einer Gruppierung lösen. Gruppiere nach c.name und entscheide dann, mittels einer Aggregat-Funktion, welcher der möglichen Werte aus k.date für Dich relevant ist.

        Grüße
          Klaus

        [1] distinct ist zwar ab und zu unumgänglich, in den meisten Fällen aber der absolut falsche Weg ein Problem lösen zu wollen.