2009-09-08 124 views
5

我有一個loooooong存儲過程,它在數據庫的不同表中運行大約15個select語句 - 我將選擇的所有結果都插入臨時表中。但是 - 該表有一些行是完全重複的。該臨時表看起來是這樣的:從重複的行中選擇一行

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 

而且我想如何表看看到底是這樣的:

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 

我怎麼能只返回一行,如果有多個重複的行並仍然返回不重複的行?

回答

9
SELECT DISTINCT DocID, VisitDate, DocName 
FROM mytable 

或者我錯過了什麼?

更新:

如果在存儲過程的控制,你可以重寫它,以便沒有重複將永遠進入表。

假設DocIDPRIMARY KEY,其聲明爲例如在使用IGNORE_DUP_KEY臨時表:

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

INSERT 
INTO @mytable 
SELECT … 
FROM source_table 

這將跳過DocID

+0

INT NOT NULL PRIMARY KEY WITH(IGNORE_DUP_KEY = ON)... @ Quassnoi此行將我從錯誤中拯救出來.. – user1947927 2013-01-23 10:27:46

2

重複嘗試SELECT DISTINCT代替SELECTDISTINCT關鍵字將刪除重複值

2

如果重複項來自源表,則在對臨時表執行插入操作時執行SELECT DISTINCT。

如果重複的數據來自表中的,則只需在插入所有行後從臨時表中執行SELECT DISTINCT即可。

嘗試實際上刪除表中重複的行涉及多一點,但在這裏似乎並不必要,因爲您正在使用臨時表。

0

如果您想從臨時表中刪除重複項或更好,請不要將它們放在第一位,將多個選擇轉換爲更大的聯合查詢並將該結果插入臨時表。