Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Dublettencheck über mehrere Spalten? (https://www.delphipraxis.net/157894-dublettencheck-ueber-mehrere-spalten.html)

fillibuster 28. Jan 2011 14:12

Datenbank: SQLite • Version: 3.x • Zugriff über: UniDac

Dublettencheck über mehrere Spalten?
 
Hi,

ich kann ja mit folgender SQL-Abfrage Dubletten in einer Spalte rausbekommen:
Code:
Select * 
from contacts
where lastname in(
select lastname        
from contacts
group by lastname
having count(*) > 1) order by lastname;
Wie mache ich das aber bei einer Prüfung über mehrere Spalten?

Viele Grüße ....

DeddyH 28. Jan 2011 14:18

AW: Dublettencheck über mehrere Spalten?
 
Im Subquery alle relevanten Spalten abfragen und gruppieren, wenn ich nicht irre.

Deep-Sea 28. Jan 2011 14:19

AW: Dublettencheck über mehrere Spalten?
 
SELECT *
FROM Tabelle
WHERE ID NOT IN (
SELECT Min(ID)
FROM Tabelle
GROUP BY Feld_1, Feld_2, Feld_n
);

Das listet dir alle Kopien auf, jedoch nicht die Originale (die mit der geringsten ID). Vlt. passt es ja für deinen Anwendungszweck.

Bummi 28. Jan 2011 14:19

AW: Dublettencheck über mehrere Spalten?
 
Code:
Select Name,Vorname,Strasse,Count(*)
from tabelle
Group by Name,Vorname,Strasse
Having Count(*)>1
gegf. mit Soundex o.ä.
sorry not sorgfältig genug gelesen

Code:
Select * from Adressen t
join (
Select Name,Vorname,Strasse,Count(*) as Anz
from Adressen
Group by Name,Vorname,Strasse
Having Count(*)>1
) a
on a.Name=t.Name and a.Vorname=t.Vorname and a.Strasse=t.Strasse
order by t.name,t.Vorname,t.Strasse

fillibuster 28. Jan 2011 14:32

AW: Dublettencheck über mehrere Spalten?
 
:cheer: Danke euch. Bummi's has won :mrgreen:

fillibuster 1. Feb 2011 09:06

AW: Dublettencheck über mehrere Spalten?
 
Hi,

jetzt brauche ich noch mal einen Denkanstoss. Alle gefundenen Datensätze besitzen ein modified-Timestamp. Ist es möglich direkt aus der Query heraus den oder die älteren Datensätze mit einem Flag zu versehen, oder muss ich das über das Programm machen?

Viele Grüße ...

Deep-Sea 1. Feb 2011 09:16

AW: Dublettencheck über mehrere Spalten?
 
Meine Abfrage liefert dir ja alle doppelten zurück, außer den ältesten (oder neusten, wenn du Max(ID) anstatt Min(ID) nutzt). Wenn du jetzt das Select in ein Update wandelt, hast du doch, was du willst, oder? :-D

fillibuster 1. Feb 2011 09:23

AW: Dublettencheck über mehrere Spalten?
 
Hi,

nein. Zuerst möchte ich alle Datensätze haben, die irgenwie doppelt vorkommen (verwende dazu Bummis Code). Jetzt möchte ich noch Folgendes erreichen:

Zitat:

Meier, Alfred | 2009.01.23 -> älter, braucht also ein Flag
Meier, Alfred | 2009.05.23

Heiermann, Kerstin | 2009.01.23 -> älter, braucht also ein Flag
Heiermann, Kerstin | 2009.06.23 -> älter, braucht also ein Flag
Heiermann, Kerstin | 2009.09.23

...
Viele Grüße ...

Deep-Sea 1. Feb 2011 09:29

AW: Dublettencheck über mehrere Spalten?
 
Ja?! Und da meine Abfrage alle Datensätze außer dem neusten liefern (wobei ich das ja an der ID festmache, die Zeit ginge ggf. auch, sofern sie eindeutig ist), kannst du diese Datensätze ändern, wenn du das Select- zu einem Update-Statement machst ...

fillibuster 1. Feb 2011 09:39

AW: Dublettencheck über mehrere Spalten?
 
Hi,

es sollten aber trotzdem alle Datensätze (auch die Neusten) auf der Oberfläche angezeigt werden. Bei dir würde auch nur der ältere Datensatz und nicht alle älteren Datensätze angezeigt werden, oder verstehe ich dich da falsch :gruebel:

Viele Grüße ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:02 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz