我的mySQL数据库有一些重复的条目。他们有相同的领域 - 电话。但他们也有不同的领域。例如,我有两个带有相同电话的条目,但第一个条目的评级字段= default_value,第二个条目的评级字段= 5。 所以我必须合并这些条目,然后才删除重复...
更常见的例子:
entry1.phone==123
entry1.phone==etry2.phone
entry1.rating!=entry2.phone
entry1.rating==default_value(0)
entry2.rating==5
merge
entry1.phone==123
entry1.rating==5
entry2 is deleted
答案 0 :(得分:2)
我认为你不能有效地在SQL中做到这一点。一个缓慢的方法就是:
CREATE TEMPORARY TABLE tmp_table (...);
INSERT INTO tmp_table SELECT phone, max(rating) FROM table GROUP BY phone;
TRUNCATE table;
INSERT INTO table SELECT * FROM tmp_table;
更好的方法是存储过程或外部脚本。从phone
排序的表中选择所有行,并手动进行分组/合并/删除(迭代结果,与上一行的phone
值进行比较,如果不同则有新组等)。在MySQL中编写存储过程很痛苦,所以我不打算为你编写代码。 :)
答案 1 :(得分:1)
如果您只是尝试使用非默认评级更新第一条记录,那么您似乎并不需要合并任何记录。我想你可以删除任何默认评级的记录。
Select a.*
from tbl a
inner join tbl b
on a.Phone = b.Phone
and a.Rating < b.Rating
Delete a
from tbl a
inner join tbl b
on a.Phone = b.Phone
and a.Rating < b.Rating
如果您确实需要更新第一条记录并删除第二条记录,那么如果您有自动增量ID,则可以执行类似操作。下一个示例是如果存在ID,我将如何更新第一条记录。如果您只有一次重复的电话号码,这只是可靠的。
Update a
Set a.Rating = b.Rating
from tbl a
inner join tbl b
on a.Phone = b.Phone
and a.Rating < b.Rating
and a.ID < b.ID
Delete a
from tbl a
inner join tbl b
on a.Phone = b.Phone
and a.Rating = b.Rating
and b.ID > a.ID
希望这有帮助。
-Ranthalion