AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Dublettencheck über mehrere Spalten?
Thema durchsuchen
Ansicht
Themen-Optionen

Dublettencheck über mehrere Spalten?

Ein Thema von fillibuster · begonnen am 28. Jan 2011 · letzter Beitrag vom 1. Feb 2011
Antwort Antwort
Seite 1 von 2  1 2      
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#1

Dublettencheck über mehrere Spalten?

  Alt 28. Jan 2011, 15:12
Datenbank: SQLite • Version: 3.x • Zugriff über: UniDac
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 ....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dublettencheck über mehrere Spalten?

  Alt 28. Jan 2011, 15:18
Im Subquery alle relevanten Spalten abfragen und gruppieren, wenn ich nicht irre.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Dublettencheck über mehrere Spalten?

  Alt 28. Jan 2011, 15:19
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.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Dublettencheck über mehrere Spalten?

  Alt 28. Jan 2011, 15:19
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
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (28. Jan 2011 um 15:23 Uhr)
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#5

AW: Dublettencheck über mehrere Spalten?

  Alt 28. Jan 2011, 15:32
Danke euch. Bummi's has won
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#6

AW: Dublettencheck über mehrere Spalten?

  Alt 1. Feb 2011, 10:06
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Dublettencheck über mehrere Spalten?

  Alt 1. Feb 2011, 10:16
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?
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#8

AW: Dublettencheck über mehrere Spalten?

  Alt 1. Feb 2011, 10:23
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#9

AW: Dublettencheck über mehrere Spalten?

  Alt 1. Feb 2011, 10:29
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 ...
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
fillibuster

Registriert seit: 3. Nov 2010
Ort: Coesfeld
245 Beiträge
 
Delphi 2010 Professional
 
#10

AW: Dublettencheck über mehrere Spalten?

  Alt 1. Feb 2011, 10:39
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

Viele Grüße ...
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 Uhr.
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