Select distinct .... order by ...
Eddie
- datenbank
0 Michael Schröpl0 Eddie
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
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
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
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.