2009-09-08 13 views
5

Ich habe eine lange gespeicherte Prozedur, die etwa 15 SELECT-Anweisungen über verschiedene Tabellen in einer Datenbank ausführt - ich füge alle Ergebnisse der Auswahl in eine temporäre Tabelle ein. Allerdings enthält diese Tabelle einige Zeilen, die genaue Duplikate sind. Die temporäre Tabelle sieht wie folgt aus:Auswählen einer Zeile aus duplizierten Zeilen

DocID | VisitDate   | DocName 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
646681 | 8/26/2009 1:07:01 PM | Doc3  
263272 | 8/26/2009 1:07:01 PM | Doc4 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
1903875 | 8/26/2009 1:07:01 PM | Doc7 

Und wie ich die Tabelle am Ende aussehen würde, ist wie folgt:

DocID | VisitDate   | DocName 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
646681 | 8/26/2009 1:07:01 PM | Doc3  
263272 | 8/26/2009 1:07:01 PM | Doc4 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
1903875 | 8/26/2009 1:07:01 PM | Doc7 

Wie kann ich nur eine Zeile zurückgeben, wenn es mehrere sind Duplizieren Sie Zeilen und geben Sie immer noch Zeilen zurück, die keine Duplikate sind?

Antwort

9
SELECT DISTINCT DocID, VisitDate, DocName 
FROM mytable 

Oder fehlt mir etwas?

Update:

Wenn Sie die Kontrolle über die gespeicherte Prozedur haben, können Sie es neu zu schreiben, so dass keine Duplikate jemals in der Tabelle erhalten wird.

DocID Unter der Annahme ist eine PRIMARY KEY, sie als solche in der temporären Tabelle erklären IGNORE_DUP_KEY mit:

DECLARE @temp TABLE (DocId INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON), …) 

INSERT 
INTO @mytable 
SELECT … 
FROM source_table 

Dies wird Duplikate überspringen auf DocID

+0

INT NICHT NULL PRIMÄRSCHLÜSSEL MIT (IGNORE_DUP_KEY = ON) ... @ Quassnoi diese Zeile rettete mich von einem Fehler. – user1947927

2

Versuchen SELECT DISTINCT statt SELECT. DISTINCT Schlüsselwort entfernt den doppelten Wert

2

Wenn die Duplikate aus den Quellentabellen kommen, dann führen Sie eine SELECT DISTINCT aus, wenn Sie eine Einfügung in Ihre temporären Tabellen vornehmen.

Wenn die Duplikate über Tabellen kommen, dann tun Sie einfach eine SELECT DISTINCT aus Ihrer temporären Tabelle, nachdem Sie alle Zeilen eingefügt haben.

Versuch, tatsächlich Zeilen aus einer Tabelle zu löschen, die Duplikat sind ist ein bisschen mehr beteiligt, aber scheint hier nicht notwendig zu sein, weil Sie mit einer temporären Tabelle arbeiten.

0

Wenn Sie die Duplikate aus der temporären Tabelle oder noch besser entfernen möchten, stellen Sie sie nicht zuerst dort ein, drehen Sie mehrere Selects in eine größere Union-Abfrage und fügen Sie dieses Ergebnis in Ihre temporäre Tabelle ein.

Verwandte Themen