我试图从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),但它似乎只是返回每个组的最大值,而不是具有最大值的记录
答案 0 :(得分:0)
现在我做了以下但不是(恕我直言)一个完美的解决方案
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标准化为单个非空值,然后我可以使用上面发布的序列轻松删除欺骗:
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)
在一个理想的世界里,我已经想出了一个更新查询来删除每个问题的欺骗,但这个中间步骤现在运行良好。
如果某人对我的问题有更直接的解决方案,请保持问题公开且未解决。