2010-08-20 65 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。只是看起來更好:)