join erzeugt Dubletten

join erzeugt Dubletten

am 18.06.2007 15:40:01 von echo

Hallo Leute,

es gibt ja im Netz einige Beschreibungen zu join. Aber mein Problem
wird da nicht behandelt. Oder ich hab's nicht gefunden.

Vereinfacht dargestellt gibt es zwei Tabellen:
'mensch(ort,pkz,...)' und 'maschine(ort,standort,...)'.
Die Zuordnung (mensch.pkz wird in maschine.standort gespeichert)
gehorcht der Bedingung 'maschine.ort = mensch.ort', d.h. kein
Fremder bekommt eine Maschine.
Die Abfrage: SELECT * FROM maschine LEFT JOIN mensch
ON maschine.standort = mensch.pkz
WHERE maschine.ort = 'C'
liefert die gewünschte Liste. Herrenlose Maschinen werden ohne
Menschdaten aufgelistet. Mensch wird nach Ortswechsel weiterhin
gelistet, bekommt aber am alten Ort keine Maschine mehr.
Das ist alles in Ordnung.
Jetzt aber kommt Mensch mit Zweitwohnung ins Spiel. Also habe ich
mensch.pkz von unique auf index degradiert und einen Datensatz mit
gleicher pkz aber anderem Ort gespeichert.
Die Erkenntnis ist, dass join nicht an der ersten Fundstelle stoppt.
Die Zeile wird doppelt erzeugt, das ist nicht richtig.
Falls es da eine Lösung gibt wäre ich dankbar, wenn mir das jemand
verraten könnte.

MfG
hjs

Re: join erzeugt Dubletten

am 18.06.2007 15:48:12 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 erzeugt Dubletten

am 19.06.2007 09:58:24 von echo

Andreas Kretschmer schrieb:
>
> begin Hans-Jürgen Schneider schrieb:
> [ wirre Beschreibung entsorgt ]
>
> MySQL hat Mittel, eine Tabelle zu beschreiben. Das würde dies hier
> vereinfachen.

Ich hätte nicht gedacht, dass ich zwei Tabellen mit je zwei Spalten
hier aufmalen muss.

> > Die Erkenntnis ist, dass join nicht an der ersten Fundstelle stoppt.
> > Die Zeile wird doppelt erzeugt, das ist nicht richtig.
>
> Klingt so, als hättest Du DISTINCT noch nicht in der Doku gefunden.

Es wird mehrfach erwähnt...
Seine korrekte Benutzung scheint aber eines der am besten gehüteten
Geheimnisse zu sein.
Inzwischen habe ich aber durch Probieren (scheint üblich zu sein)
herausgefunden, wie es geht.
Du hast mir also den entscheidenden Tipp gegeben.

MfG
hjs