2010-08-20 42 views
0

我正在修改phpBB的表,以便为朋友建立双向关系。不幸的是,已添加朋友的人创建了重复行:删除MySQL中的双向副本

user1 user2 friend 
2  3  true 
3  2  true 
2  4  true 

所以我想从上面的示例中删除第1行和第2行。目前,这是我的查询生成(不大气压工作):

DELETE FROM friends WHERE user1 IN (SELECT user1 FROM (SELECT f1.user1 FROM friends f1, friends f2 WHERE f1.user1=f2.user2 AND f1.user2=f2.user1 GROUP BY f1.user1) AS vtable); 

通过Mysql Duplicate Rows (Duplicate detected using 2 columns)启发,但不同的是,我没有独特的ID列,我想从具有远离额外的列。

回答

1

道歉,如果这是不是100%合法的MySQL,我是MSSQL用户...

DELETE F1 
FROM friends F1 
INNER JOIN friends F2 
ON F2.user1 = F1.user2 
AND F2.user2 = F1.user1 
WHERE F1.user1 < F1.user2 
+0

谢谢,一些改变,我想出了这个:DELETE FROM F1 F1朋友朋友加盟F2 ON F2.user1 = F1.user2 AND F2.user2 = F1.user1 WHERE F1。 user1 2010-08-20 19:22:33

0
DELETE r 
FROM friends l, friends r 
WHERE l.user1 = r.user2 
AND l.user2 = r.user1 

这将删除这两个条目。如果你想继续使用它们,你必须添加一个像Will A alread所建议的where语句,但是我建议你使用>而不是<来保持较小的user1 id。只是看起来更好:)