1

phpBB のテーブルを変更して、友達と双方向の関係を持たせています。残念ながら、すでに友達を追加した人は重複した行を作成しています:

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

したがって、上記の例から行 1 と 2 を削除したいと思います。現在、これは構築された私のクエリです(atmは機能しません):

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 列がなく、余分な列を持たないようにしたいということです。

4

2 に答える 2

3

これが 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
于 2010-08-20T19:07:30.700 に答える
0
DELETE r
FROM friends l, friends r
WHERE l.user1 = r.user2
AND l.user2 = r.user1

これにより、両方のエントリが削除されます。それらを維持したい場合は、Will A が既に提案したような where ステートメントを追加する必要がありますが、< の代わりに > を使用して、より小さな user1 ID を維持することをお勧めします。見た目が良くなります:)

于 2010-08-20T19:24:27.623 に答える