我读了一些关于如何删除重复的帖子,通过比较表与另一个实例,但是我不想删除重复,我想比较它们。
。我有字段"id","sold_price","bruksareal","kommunenr","g
我想确定重复/相同的行(相同的bruksareal, kommunenr, g
我相信这将更容易识别我以后想在其他字段上比较的行(例如。如"sold_price", "sold_date"等)
如果你认为我的方法是错误的,我愿意接受你的建议。跨所有字段对表本身执行连接,然后使用exists
,查询,例如:
Update Table1
Set reference = UUID()
Where exists (
Select tb1.id
from Table1 tb1 inner join Table1 tb2 on
tb1.Field1 = tb2.Field1 AND
tb1.Field2 = tb2.Field2 AND
etc
Where tb1.Id = Table1.Id
And tb1.Id != tb2.Id
)
实际上你可以用一个连接来简化
Update Table1
Set reference = UUID()
From Table1 inner join Table1 tb2 on
Table1.Field1 = tb2.Field1 AND
Table1.Field2 = tb2.Field2 AND
etc
Where Table1.Id != tb2.Id
取决于你想在哪里做,我会去哈希实现。对于每次插入,在执行插入时计算所需列的哈希值(可能是触发),之后您应该能够非常容易地找出哪些行是重复的(如果对该列进行索引,查询应该非常快,但请记住,这仍然不是int列,因此随着时间的推移,它会变得有点慢)。
在此之后,您可以对重复的记录做任何您喜欢的事情,而不需要对数据库进行非常昂贵的查询。
稍后编辑:请确保将空值转换为一些定义值,因为如果操作数为空,一些mysql函数(如MD5)将只返回空。concat也是如此—如果一个操作数为null,它将返回null(同样的对concat_ws无效)。