我正在尝试从其中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。在我看来,我可以使用Max(Char_Length(FieldD),但这似乎只是返回每个组的最大值,而不是返回具有最大值的记录
最佳答案
目前,我做了以下(尽管不是)以下完美解决方案(恕我直言)
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标准化为单个非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)
在理想的情况下,我会想出一个更新查询来删除每个问题的重复项,但是此中介步骤目前效果良好。
如果有人对我的问题有更直接的解决方案,请不要公开和解决问题。