Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Flocko am August 08, 2016, 15:52:51

Titel: Vermeiden von Duplikaten bei Anfügeabfragen
Beitrag von: Flocko am August 08, 2016, 15:52:51
Hallo Leute,

wie kann ich denn verhindern, dass beim Durchführen einer Anfügeabfrage identische Datensätze in die Tabelle geschrieben werden? Einzelne Spalten von mehreren Datensätzen dürfen identisch sein, jedoch eben nicht alle...

Danke schonmal ;)
Titel: Re: Vermeiden von Duplikaten bei Anfügeabfragen
Beitrag von: ebs17 am August 08, 2016, 16:12:16
Technisch ergänzt man die Anfügeabfrage um eine Inkonsistenzprüfung, siehe Grundlagen - SQL ist leicht (4) - Aktualisierung einer Tabelle (http://www.ms-office-forum.net/forum/showthread.php?t=304156).

Zur Absicherung des Ganzen auf Tabellenebene (es gibt ja auch Anfügungen per Recordset, Formular oder direkt in der Tabelle) erzeugt man einen eindeutigen (zusammengesetzten) Index (http://www.ardiman.de/datenbanken/grundlagen/tabellen/#SEC1) über relevante Felder.
Titel: Re: Vermeiden von Duplikaten bei Anfügeabfragen
Beitrag von: PhilS am August 08, 2016, 16:12:58
Wenn es darum geht, dass in den neu einzufügenden Datensätzen keine Duplikate sind, reicht es wenn deine Auswahlabfrage ein SELECT DISTINCT Statement ist.

Wenn die anzufügenden Datensätze bereits in der Zieltabelle vorhanden sein könnten, bleibt dir nichts anderes übrig als Quellabfrage und Zieltabelle über alle Felder mit einem LEFT JOIN zu verbinden und nur die Datensätze auszugeben/einzufügen, die auf der Seite der Zieltabelle NULL sind.
Titel: Re: Vermeiden von Duplikaten bei Anfügeabfragen
Beitrag von: MaggieMay am August 08, 2016, 23:29:24
Hi,
ich bin ein wenig überrascht:
Zitatbleibt dir nichts anderes übrig als Quellabfrage und Zieltabelle über alle Felder mit einem LEFT JOIN zu verbinden
Ist so etwas tatsächlich gängige Praxis zur Vermeidung doppelter Datensätze?

Titel: Re: Vermeiden von Duplikaten bei Anfügeabfragen
Beitrag von: PhilS am August 09, 2016, 08:39:54
Zitat von: MaggieMay am August 08, 2016, 23:29:24ich bin ein wenig überrascht:
Zitatbleibt dir nichts anderes übrig als Quellabfrage und Zieltabelle über alle Felder mit einem LEFT JOIN zu verbinden
Ist so etwas tatsächlich gängige Praxis zur Vermeidung doppelter Datensätze?
In der Regel nicht, weil man normalerweise bei einem sinnvollen Datenbankdesign einen eindeutigen Schlüssel hat, der jeden Datensatz eindeutig identifiziert. - Dann bildet man den Join natürlich nur über diesen Schlüssel.

Es war jedoch vom OP genau die o.g. Anforderung formuliert worden:
ZitatEinzelne Spalten von mehreren Datensätzen dürfen identisch sein, jedoch eben nicht alle...

Dies deutet auf ein Designproblem hin, es mag jedoch durchaus Szenarien geben (z.B. beim Import von Fremddaten), wo sich diese Problemstellung nicht vermeiden lässt und somit der o.g. Ansatz eine praktikable und sinnvolle Lösung ist.
Titel: Re: Vermeiden von Duplikaten bei Anfügeabfragen
Beitrag von: ebs17 am August 09, 2016, 10:32:29
Primär dürfte Flocko noch einmal überdenken, was er denn will. Dabei sollte er den Begriff "identisch" inhaltlich wahrnehmen und formulieren.

Ein identischer Datensatz ist über alle Feldinhalte gleich zu einem weiteren und wäre, um das zu ermitteln, auch über alle Felder zu vergleichen.
Geht es um ein paar weniger Felder, dann muss man das auch so tun und so sagen.

Mit der Datenmodellkeule muss man da nicht immer kommen: In einer Verknüpfungstabelle einer m:n-Beziehung, die nur die notwendigen Fremdschlüssel enthält und wo auch auf einen Autowert als Primärschlüssel verzichtet wird (weil der inhaltlich nichtssagend und damit unnutzbar ist), könnte ein oben beschriebener Fall auch in einer richtigen Datenbank eintreten.

ZitatIst so etwas tatsächlich gängige Praxis zur Vermeidung doppelter Datensätze?
Käme man besser zur Bestimmung von Duplikaten, wenn man einen Teil der notwendigen Schlüssel unterschlägt?