2016-05-25 269 views
1

我有一个像“马克安东尼”,“詹姆斯邦德”等名称的客人名单,其中约1000人。 现在在另一个表中我有类似的列表。我想清理我的名字的列表,以便删除也是清单2.如何删除MySql中的重复项?

所以,如果詹姆斯·邦德是名单2,那么它应该从列表中删除该字段1

+0

从table1中选择row_id其中name(从table2中选择名称)这里是您的常用项目列表。 DELETE FROM table1 where row_id in(select table_id from table1 where name in(select from table2)) –

回答

0

在这里你去任何名称。

Delete FROM table1 
WHERE name1 
IN 
(
SELECT 
name2 
FROM table2 
); 
+0

我试过你的方法在我的160.000列表和phpmyadmin挂出了30分钟,然后我重新启动了mysql服务器 –

+0

虽然IN不能正常工作通常对于大量的数据集,如果它已经挂起你的服务器,我会怀疑问题是否与索引有关。你在他们各自的表上的name1和name2字段上有索引吗? – Kickstart

1

试试这个;)

DELETE list1 FROM list1 
LEFT JOIN list2 ON list1.name = list2.name 
WHERE list2.name IS NOT NULL; 
+0

轻微的语法问题。在DELETE上进行连接时,您需要指定要从中删除的表。所以_DELETE list1 FROM list1左外连接等_ – Kickstart

+1

@Kickstart感谢您的catch.Updated:D – Blank

0

可以使用子查询做到这一点。

delete 
from list1 
where exists (select 1 
       from list2 
       where list2.name = list1)