Удаление двунаправленных дубликатов в MySQL - PullRequest
0 голосов
/ 20 августа 2010

Я изменяю таблицу 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 (Дубликат обнаружен с использованием 2 столбцов) , но разница в том, что у меня нет столбца с уникальным идентификатором, и я бы хотел не использовать дополнительный столбец. 1009 *

Ответы [ 2 ]

1 голос
/ 20 августа 2010

Извиняюсь, если это не 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 голосов
/ 20 августа 2010
DELETE r
FROM friends l, friends r
WHERE l.user1 = r.user2
AND l.user2 = r.user1

При этом удаляются обе записи. Если вы хотите сохранить их, вы должны добавить оператор where, например, как будет предложено Will A, но я предлагаю вам использовать> вместо <, чтобы сохранить меньший идентификатор user1. Просто выглядит лучше :) 1002 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...