phpbar.de logo

Mailinglisten-Archive

Dubletten

Dubletten

Michael Bergbauer mysql-de_(at)_lists.bttr.org
Sat, 14 Sep 2002 09:01:26 +0200


On Fri Sep 13, 2002 at 11:5046PM -0000, Alex Bamesreiter wrote:
> Hi Leute,
> ich kämpfe mit Dubletten. Aus einer importierten (wohl durch Programmfehler
> etwas verwüsteten) dBase Datei möchte ich in MySQL zwei Arten von Dubletten
> entfernen:
> - Die 2 mal eingetragenen Leute mit gleicher Kundennummer und Name
> (Name,Vormame,Kd_Nr identisch ) einen Datensatz davon löschen. Der andere
> soll bleiben.
> - Die unterschiedlichen Leute mit identischer Kundennummer sollen die 2.
> Datensätze jeweils in eine andere Tabelle oder so um nachher neu mit eigener
> Kd_Nr angelegt zu werden .
> Beispiel:
> Name Vorname Kd_Nr  Datensatznr.
> Muster  Maik    123         1   (diesen stehen lassen)
> Muster  Maik    123         2   (diesen löschen)
> Muster Klaus     138        3  (dieser bleibt)
> Schulze Heinz     138        4  (Dieser kriegt 'ne neue Kd_Nr oder soll in
> ne andere Tabelle)
> 
> Die doppelten Kundennummern bekomm ich schon abgefragt (SELECT KD_NR,
> Count(KD_NR) AS Anzahl FROM STAMM GROUP BY KD_NR HAVING Anzahl>1; und kann
> dan?n eine 2. Abfrage dazu laufe lassen mit allen betroffenen
> Kundennummer?n. Aber davon jeden 2. löschen??

Wenn dann wuerde ich _alle_ rueberkopieren in die Tabelle zum neu anlegen
und _alle_ in der alten Tabelle loeschen. 

1. Woher willst du wissen, welcher der beiden der rechtmaessige Inhaber
der Kundennummer ist? 
2. Hast du die Gewissheit, wenn jemand was mit der alten Kundennummer
bestellt, das er dann nen Fehler gemacht hat, und du kannst dann die
richtige neue Kundennummer nachsehen. Wenn du aber die alte Kundennummer
bestehen laesst, koennte es zu weiteren Problemen kommen ...

Wenn du es trotzdem machen willst:
Kopier alle diese Datensaetze komplett in eine zweite Tabelle, und dann:
(Pseudocode)

alle=Select <Schluesselkandidat> from TEMP_Tabelle order by Kundennummer

foreach (alle)
{
    if (Rownum % 2) /* damit kriegst du jeden zweiten Datensatz */
    {	
        delete from kundentabelle
        where(schluesselfelder==alle.schluesselfelder)
    }
}

Evtl. brauchst du Fallunterscheidungen, wenn du nicht nur Doubletten
hast, sondern Kundennummern auch dreimal, viermal oder oefter vorkommen.

-- 
Michael Bergbauer <michael_(at)_noname.franken.de>
use your idle CPU cycles - See http://www.distributed.net for details.
Visit our mud Geas at geas.franken.de Port 3333

---
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive