Februar 26, 2021, 13:26:45

Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!


Doppelte Datensätze in UNION Abfrage

Begonnen von herb54, Februar 15, 2021, 13:15:12

⏪ vorheriges - nächstes ⏩

herb54

Hallo zusammen,

ich möchte zwei Tabellen über eine UNION zusammenführen. Für beide Tabellen habe ich jeweils eine Auswahlabfrage erstellt: AbfrageT und AbfrageM.
Die Felder beider Tabellen sind exakt gleich: Nachname, Vorname, Sonstiges, Straße, PLZ, Ort.
In Tabelle tblM gibt es Adressen die nur dort auftauchen aber es gibt auch welche die in Tabell tblT auftauchen.
In Tablle tblT tauchen ebenfalls Adressen auf die es nur dort gibt aber auch welche die in Tabelle tblM stehen. Die Auswahlabfragen nannte ich AbfrageT (tblT) und AbfrageM (tblM). Hier der SQL Code:

SELECT DISTINCT Nachname, Vorname, Sonstiges, Straße, PLZ, Ort
FROM tblT
UNION SELECT  DISTINCT Nachname, Vorname, Sonstiges, Straße, PLZ, Ort
FROM tblM
ORDER BY Nachname;

Mein Problem: Leider erscheinen die Adressen die es in beiden Tabelle tblM und tblT gibt doppelt. Eigentlich müssten die doch durch die UNION Abfrage automatisch auf einen Datensatz reduziert werden, oder liege ich da falsch???

Grüße
Herbert





MzKlMu

Februar 15, 2021, 13:52:34 #1 Letzte Bearbeitung: Februar 15, 2021, 14:27:01 von MzKlMu
Hallo,
wenn die Inhalte der restlichen Felder unterschiedlich sind, wird da nix reduziert.
Aber, wenn beide Tabellen exakt gleich sin, so gehört das in eine Tabelle zusammengefasst, mit einem Kennzeichen ob M oder T.
Damit dürfte sich auch gleich das Problem erledigt haben.
Gruß
Klaus

herb54

Hallo, meinst du jetzt die restlichen Felder die es noch gibt in den Tabellen gibt? - die sind natürlich unterschiedlich. Die durch die Abfragen angesprochenen Felder sind aber exakt gleich. Vielleicht ein Gedankenfehler von mir - ich dachte, dass es bei der Zusammenfassung über UNION  nur um die in der Abfrage angesprochenen Felder geht. Könnte man hier evtl. über SQL noch separieren d.h. die doppelten Datensätze ausschließen die in beiden vorkommen?
Grüße
Herbert

MzKlMu

Februar 15, 2021, 15:35:42 #3 Letzte Bearbeitung: Februar 15, 2021, 15:44:41 von MzKlMu
Hallo,
wenn die wirklich alle gleich sein, darf es keine Doppelungen geben, auch wenn man das DISTINCT weglässt.
Die Frage ist jedoch, wieso sind das überhaupt 2 Tabellen (tblM und tblT), warum hast Du das nicht gleich in einer Tabelle wenn Du per Union doch zusammenklebst.
Darauf bist Du jetzt nicht eingegangen.
Gruß
Klaus

ebs17

Wenn es Dir um Adressen geht, dann schmeiße Namen und Sonstiges aus der Abfrage raus. Das UNION ohne ALL sorgt über eine interne Gruppierung für Duplikatfreiheit.
Mit freundlichem Glück Auf!

Eberhard

andyfau

Hallo Herbert,
Deine Annahme, dass nur die tatsächlich in der Abfrage angesprochenen Felder gleich sein müssen, ist richtig.
Was in den übrigen Feldern steht ist irrelevant. Distinct bezieht sich auf Doppelungen innerhalb der Tabelle in der Select-Anweisung. Es hat keinen Einfluss auf den zweiten Select. Es ist also hier egal ob vorhanden oder nicht, wenn in den einzelnen Tabellen keine Doppelungen sind.
Ich bin der Meinung das tatsächlich unterschiedliche Inhalte in einem oder mehreren abgefragten Feldern sind.
(Blank,LEER, NULL sieht man ja nicht auf Anhieb.)

Versuch doch mal, die Select-Anweisung nacheinander nur jeweils mit einem Feld auszuführen. Dann sollte man die Sätze (mit vermeintlich gleichem Inhalt), die trotzdem doppelt kommen, mal byteweise untersuchen.

Viel Erfolg
Andreas

crystal

Hallo,
m. E. können DS doppelt auftreten, weil DISTINCT sich jeweils nur auf die Teil-Abfrage bezieht. Also muss DISTICT "vorgelagert" werden, vielleicht könnte es so gehen:

Select DISTINT xxx from
(Select xxx from TblA
Union
Select xxx from TblB)

Wäre irgendwie logisch, oder? Bitte mal probieren...

Gruß,
crystal
Wer Fehler in meinen Antworten findet, darf sie behalten, muss sie aber kommentieren. ;-)
Dies ist keineswegs arrogant gemeint, sondern soll nur unterstreichen, dass meine Antworten - natürlich - nicht immer fehlerfrei sind und sein können.
Devise: bitte immer erst selbst probieren!

Aus gesundheitlichen Gründen nur noch selten dabei...

herb54

Hallo zusammen,
so ich habe jetzt etliche Varianten durch:
a) ich habe einen Datensatz kopiert und in die andere Tabelle eingefügt d.h. die müssten exakt identisch sein - wieder werden beide nach der UNION Abfrage dargestellt
b) ich habe die Werte aller Felder nacheinander bis auf den Nachnamen gelöscht - das Gleiche
c) ich habe die DISTINCT Anweisung vorangestellt (wie von crytal erwähnt) = ergibt einen Synthaxfehler in SQL
d) ich habe im SQL Code die Felder nacheinander entfernt bis auf den Nachnamen - und hier war plötzlich das Feld "Sonstiges" die Ursache d.h. wenn ich es weglasse sind die doppelten Datensätze verschwunden. Was ich aber hier absolut nicht verstehe: Ich hatte die Werte kopiert d.h. es handelt sich hier um exakt den gleichen Datensatz. Ich habe anschließend in den Eigenschaften der Tabelle nachgesehen, ob es hier Unterschiede der beiden Felder gibt, gab es aber nicht. Eigentlich wäre jetzt die Idee, das Feld in der Tabelle zu löschen und noch mal nachträglich einzufügen um zu sehen was passiert, aber logisch ist das nicht!

Grüße
Herbert

andyfau

Ist der Datentyp von sonstiges identisch? Aber ich nehme an, das hast Du schon nachgesehen. Zumindest ist die Ursache, welches Feld schuld ist ja schon mal klar. Hast du den Inhalt schon mal binär verglichen?
Tool:
https://www.gillmeister-software.de/online-tools/konvertierer/text-zu-binaer.aspx

Gruß
Andreas

PhilS

Zitat von: herb54 am Februar 16, 2021, 10:51:14Was ich aber hier absolut nicht verstehe: Ich hatte die Werte kopiert d.h. es handelt sich hier um exakt den gleichen Datensatz. Ich habe anschließend in den Eigenschaften der Tabelle nachgesehen, ob es hier Unterschiede der beiden Felder gibt, gab es aber nicht.
Die einzige Logische Erklärung ist, dass in der Ursprungstabelle ein unsichtbares Zeichen (Blank, Zeilenumbruch etc. am Feldende) über VBA/SQL eingefügt wurde, das beim manuellen Kopieren nicht übernommen wird.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

herb54

Hallo zusammen,

ich habe die Daten im Feld "Sonstiges" noch mal manuell eingegeben in beide Tabellen in einem neuen Datensatz und darauf geachtet ja keine Leerzeichen etc. zu machen. Leider das gleiche Ergebnis. Was jetzt wirklich geholfen hat:
Ich habe eine Kopie der Datenbank gemacht und das Feld "Sonstiges" in beiden Tabellen gelöscht und neu eingefügt und siehe da: die doppelten Datensätze sind weg. Schon sehr seltsam!

Grüße
Herbert

PhilS

Zitat von: herb54 am Februar 16, 2021, 13:50:12Was jetzt wirklich geholfen hat:
Ich habe eine Kopie der Datenbank gemacht und das Feld "Sonstiges" in beiden Tabellen gelöscht und neu eingefügt und siehe da: die doppelten Datensätze sind weg. Schon sehr seltsam!
Einzige potenzielle mögliche (ungetestete) Erklärung: Die Unicode Compression Eigenschaft war für die beiden Felddefinitionen verschieden eingestellt.
Access DevTools - Find and Replace
Komfortables Suchen und Ersetzen in den Entwurfseigenschaften von Access-Objekten. In Abfragen, Formularen, Berichten und VBA-Code - Überall und rasend schnell!

herb54

Hallo Phil, 

leider auch nicht! Die Unicode Kompression steht bei beiden auf "Nein".
Folgende Einstellungen gibt es bei beiden Tabellen für das Feld "Sonstiges":
Unicode Kompression Nein
IME-Modus           Keine Kontrolle
IME-Satzmodus       Keine

Grüße
Herbert


MzKlMu

Hallo,
ich lasse nicht locker (auch wenn Du meine Anmerkung ignorierst).  :D
Die Daten gehören in eine Tabelle, dann gäbe es das Problem erst gar nicht.
Gruß
Klaus

herb54

Hallo Klaus,

ich weiß! :) Eigentlich hatte ich das mit dieser UNION Abfrage im Nachhinein (Tabellenerstellungsabfrage?)so vor. Und deshalb wäre es schon wünschenswert gewesen, wenn ich keine doppelten Datensätze mehr drin hätte. Und hier würde dann meine nächste Frage kommen: Wie kann ich aus einer UNION Abfrage eine Tabelle erstellen? Ist das überhaupt möglich?

Grüße
Herbert