所以,我有这个MySQL数据库设置:
+--------------------+----------+
| email | password |
+--------------------+----------+
| example@gmail.com | xxx |
| example2@yahoo.com | xxx |
| example@gmail.com | xxx |
+--------------------+----------+
我想删除电子邮件和密码相同的重复行。
关于如何做到这一点的任何想法?
答案 0 :(得分:2)
虽然你已经填好了你的桌子,而且戈登的答案对你目前的情况和可能是最快的解决方案很有帮助,为了防止将来输入重复,你应该:
在您希望唯一的列上创建唯一(复合)索引。在你的情况下你的SQL看起来像:
Alter table yourtablename
add unique index idx_unq(`email`,`password`);
然后执行INSERT IGNORE INTO
而不是INSERT INTO
。这将忽略表中填充的任何重复的未来条目。
这篇文章也可以帮到你。
"INSERT INTO .. ON DUPLICATE KEY UPDATE" Only inserts new entries rather than replace?
答案 1 :(得分:1)
鉴于您没有id列,一种方法是创建临时表并重新插入数据:
create temporary table tempt as
select distinct email, password
from yourtable;
truncate table yourtable
insert into yourtable(email, password)
select email, password
from tempt;
编辑:
_pala有一个好点。您可以使用以下方法来防止此问题:
create unique index idx_table_email_password on table(email, password)
我还建议您添加一个自动递增的主键。但是,问题是从现有表中删除重复项,而不是手头数据的最佳结构。