2012-04-05 2 views
0

Hinweis: Wenn möglich, suche ich nach einer reinen SQL-Abfragelösung, damit ich sie im SQL Server Manager ausführen kann.Löschen/Aktualisieren von x aus x + 1 doppelten Zeilen in einer Datenbank

Ich hatte einen Fehler in meinem Skript, das bedeutet, dass einige Daten, die einmal gemeint waren zu betreten haben mehrere Male und jetzt brauche ich eine Art und Weise eingegeben wurden, entweder alle PRO company_id Feld, aber 1 Eintrag löscht oder Aktualisierung der export Spalte 1 Eintrag pro company_id wo:

short_desc die mehr als ein Vorkommen hat und long_desc hat mehr als ein Auftreten

Meine Daten wie so strukturiert:

id | company_id | short_desc | long_desc | export 
    1  1234   word   text  0 
    2  1234   word   text  0 
    3  1234   word   text  0 
    4  1234   word   text  0 
    5  1234   word   text  0 
    6  1234   word   text  0 
    7  5678   another  foo  0 
    8  5678   another  foo  0 
    9  5678   another  foo  0 
    10  5678   another  foo  0 
    11  5678   another  foo  0 
    12  5678   another  foo  0 

ich nicht dagegen, welche Einträge aktualisiert werden/so lange gelöscht, wie ich nur 1 von jeder so in dem obigen Beispiel würde ich nur zwei Einträge haben links/als export=-1 markiert.

Ich habe versucht, verschiedene Dinge mit Subselects zu tun und Gruppe von, aber ich muss immer am Gruppieren auf id als auch so enden, damit ich nie die Duplikate. Ich weiß nicht, ob es gerade ein langer Morgen gewesen ist, aber ich kann nicht an eine reine SQL-Methode denken, um das zu tun, und ich möchte versuchen, das Schreiben eines Skripts zu vermeiden, um es zu tun.

Wenn der export-Flag gesetzt ist, werde ich einfach löschen, wo es 0 gleich

I SQL Server 2008.

Antwort

1
update table set export = -1 
where table.id in 
(
    select min(id) from table group by company_id,short_desc,long_desc 
    having count(1) > 1 
) 
+0

Oh Gott, langer Morgen bin mit schätze ich. Danke vielmals. – webnoob

+0

du bist willkommen .. – hkutluay