2016-05-27 13 views
0

FieldA、FieldBおよびFieldCが同一であるテーブルから重複を削除しようとしています。私はレコードをwhere FieldD is NOT NULLにしておきたい。重複を削除特定のフィールドの値を持つレコードを保持

私は一般的にそうのような重複を削除(および将来のものを防ぐ):

CREATE TABLE newtable LIKE oldtable; 
INSERT newtable SELECT * FROM oldtable group by FieldA,FieldB,FieldC; 
Drop Table oldtable; 
Alter Table newtable RENAME oldtable; 
CREATE Unique INDEX UniqueIndex ON oldtable (FieldA,FieldB,FieldC) 

は、しかし、私はNOT NULL FieldDを含めるために、これを変更するかは不明です。それは私に最大(Char_Length(FieldD)を使用することができますが、各グループの最大値を返すようだが、最大のvalulを持つレコードではない)

答えて

0

今のところ私は以下のことをしましたが(IMHO)a完璧なソリューション

Update Table1 as T1 
Inner Join Table1 as T2 
On T1.FieldA=T2.FieldA 
And T1.FieldB=T2.FieldB 
And T1.Field=T2.FieldC 
Set T1.FieldD=T2.FieldD 
Where T1.FieldD is NULL and T2.FieldD is NOT NULL 

は、この私が単一の非ヌル値にFieldDを標準化させた後、私は簡単に私は上記の投稿のシーケンスを使用してdupesを削除することができた:理想の世界では

CREATE TABLE newtable LIKE oldtable; 
INSERT newtable SELECT * FROM oldtable group by FieldA,FieldB,FieldC; 
Drop Table oldtable; 
Alter Table newtable RENAME oldtable; 
CREATE Unique INDEX UniqueIndex ON oldtable (FieldA,FieldB,FieldC) 

私は質問ごとにダッシュを削除する更新クエリを見つけましたこの中間段階は今のところうまく機能しています。

誰かが私の質問に対してより直接的な解決策を持っている場合に備えて、質問を開いて未解決のままにしておきます。

関連する問題