JOIN und DISTINCT Problem...

JOIN und DISTINCT Problem...

am 14.07.2006 14:21:55 von christoph.soellner

Hi *,

mein Statement liefert mir vier Spalten zurück:

SELECT DISTINCT
vorname,
nachname,
sitzplatz,
configtext
FROM x LEFT JOIN [...]
##############

Jetzt ist es so, dass ich leider jede Zeile
trotz des DISTINCT doppelt zurückbekomme. Es
scheint daran zu liegen, dass in den Tabellen
der JOINs eine Spalte, die zum JOINen benutzt
wird, mit anderen Werten belegt ist, also
einmal mit 14 und einmal mit 20.

Wie kann ich denn ein DISTINCT formulieren, dass wirk-
lich nur auf die Ergebnismenge, also meine vier Spal-
ten angewendet wird und eventuelle Untershciede in
nicht sichtbaren Spalten ignoriert?

Danke,
Christoph

Re: JOIN und DISTINCT Problem...

am 14.07.2006 14:47:00 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: JOIN und DISTINCT Problem...

am 14.07.2006 15:26:36 von christoph.soellner

> Es ist kein Standard und ich weiß auch nicht, ob MySQL das hat, aber
> zumindest PostgreSQL besitzt dafür DISTINCT ON. Guggst Du:
Ohkey,... das scheint ja zu funktionieren; hab nur leider kein
pgsql... und ist das hier nicht auch dcd_M_ statt _p_ *scnr*...

Trotzdem danke.
Christoph

Re: JOIN und DISTINCT Problem...

am 14.07.2006 16:10:06 von Johannes Vogel

Hi Christoph

Christoph Soellner wrote:
> Hi *,

In SQL kennen wir % statt *.

> Wie kann ich denn ein DISTINCT formulieren, dass wirk-
> lich nur auf die Ergebnismenge, also meine vier Spal-
> ten angewendet wird und eventuelle Untershciede in
> nicht sichtbaren Spalten ignoriert?

Jetzt noch eine MySQL-Antwort:
http://dev.mysql.com/doc/refman/5.1/en/distinct-optimization .html
Also kannst du's über GROUP BY lösen.

HTH; Johannes

Re: JOIN und DISTINCT Problem...

am 14.07.2006 20:05:24 von dnoeth

Christoph Soellner wrote:

> mein Statement liefert mir vier Spalten zurück:
>
> SELECT DISTINCT
> vorname,
> nachname,
> sitzplatz,
> configtext
> FROM x LEFT JOIN [...]
> ##############
>
> Jetzt ist es so, dass ich leider jede Zeile
> trotz des DISTINCT doppelt zurückbekomme. Es
> scheint daran zu liegen, dass in den Tabellen
> der JOINs eine Spalte, die zum JOINen benutzt
> wird, mit anderen Werten belegt ist, also
> einmal mit 14 und einmal mit 20.

Wenn du wirklich das Distinct über alle 4 Spalten willst und mysql das
nicht richtig macht, ist es ganz einfach ein Bug.

Dieter

Re: JOIN und DISTINCT Problem...

am 16.07.2006 16:10:23 von christoph.soellner

"Dieter Noeth" schrieb im Newsbeitrag
news:e98md9$ssv$1@online.de...
> Christoph Soellner wrote:
>
> > mein Statement liefert mir vier Spalten zurück:
> >
> > SELECT DISTINCT
> > vorname,
> > nachname,
> > sitzplatz,
> > configtext
> > FROM x LEFT JOIN [...]
> > ##############
> >
> > Jetzt ist es so, dass ich leider jede Zeile
> > trotz des DISTINCT doppelt zurückbekomme. Es
> > scheint daran zu liegen, dass in den Tabellen
> > der JOINs eine Spalte, die zum JOINen benutzt
> > wird, mit anderen Werten belegt ist, also
> > einmal mit 14 und einmal mit 20.
>
> Wenn du wirklich das Distinct über alle 4 Spalten willst und mysql das
> nicht richtig macht, ist es ganz einfach ein Bug.

Hm, nein, glaube ich nicht:

vn nn sp ct used_config
Max Mustermannn1 12 abcdefg 12
Max Mustermannn1 12 abcdefg 14

Max Mustermannn2 15 abcdefgh 12
Max Mustermannn2 15 abcdefgh 14

Max Mustermannn3 18 abcdefgi 12
Max Mustermannn3 18 abcdefgi 14


Und das Distinct geht über _alle_ Spalten,
bevor die Ergebnis-Spalten ausgewählt werden
imo- Also kein Bug...

Danke trotzdem.
Christoph

Re: JOIN und DISTINCT Problem...

am 16.07.2006 16:52:32 von dnoeth

Christoph Soellner wrote:

>>> SELECT DISTINCT
>>> vorname,
>>> nachname,
>>> sitzplatz,
>>> configtext
>>> FROM x LEFT JOIN [...]
>>> ##############
>>>
....
> vn nn sp ct used_config
> Max Mustermannn1 12 abcdefg 12
> Max Mustermannn1 12 abcdefg 14
>
> Max Mustermannn2 15 abcdefgh 12
> Max Mustermannn2 15 abcdefgh 14
>
> Max Mustermannn3 18 abcdefgi 12
> Max Mustermannn3 18 abcdefgi 14
>
>
> Und das Distinct geht über _alle_ Spalten,
> bevor die Ergebnis-Spalten ausgewählt werden
> imo- Also kein Bug...

Natürlich ist das ein Bug, ein Distinct geht immer über alle Spalten in
der Select-Liste. In der zeitlichen Reihenfolge kommt es direkt vor dem
Order By, *nachdem* Where/Group By/Having und die Select-Liste
abgearbeitet wurden.

Dieter