2009-09-08 8 views
5

データベース内の異なるテーブル間で約15個のSELECT文を実行するストアドプロシージャがあります - 選択結果のすべてを一時テーブルに挿入します。しかし、そのテーブルには重複している行がいくつかあります。一時テーブルは次のようなものになります。重複した行から1行を選択する

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 

をそして、どのように私が最後に見て、テーブルをたいと思い、このようなものです:

複数が存在する場合、私は1行のみを戻すことができますどのように
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 

何か不足していますか?

更新:あなたはストアドプロシージャを管理している場合は何の重複が今まで表に入るんだろうように

、あなたがそれを書き換えることができます。

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

INSERT 
INTO @mytable 
SELECT … 
FROM source_table 

これは、代わりにSELECTSELECT DISTINCTを試してみてくださいDocID

+0

INT NOT NULLプライマリキーwith(IGNORE_DUP_KEY = ON)... @ Quassnoiこの行は私を大惨事から救った.. – user1947927

2

上の重複をスキップします:DocIDを想定し

IGNORE_DUP_KEYを使用して一時テーブルにそのように宣言し、PRIMARY KEYです。 DISTINCTキーワードを使用すると重複値が削除されます

2

重複がソーステーブルから発生している場合は、一時テーブルに挿入するときにSELECT DISTINCTを実行します。

,のテーブルに重複がある場合は、すべての行を挿入した後に、テンポラリテーブルからSELECT DISTINCTを実行してください。

実際にのテーブルから行を削除しようとすると、重複しているテーブルが削除されますが、一時テーブルを使用しているため、ここでは必要ありません。

0

一時テーブルから重複を削除したい場合や、それよりも優先させる場合は、最初に複数の選択を入れてより大きな結合クエリにし、その結果を一時テーブルに挿入します。

関連する問題