УДАЛЕНИЕ дублированных пользователей (MySQL) - PullRequest
0 голосов
/ 19 апреля 2010

У меня есть две таблицы. Есть информация о пользователях с двух сайтов:
p_users
p_users2
На первом сайте 3726 пользователей, на втором 13717.

Некоторые пользователи в p_users2 находятся в p_users. Я хочу объединить эти две таблицы в одну большую таблицу, но строки с одинаковыми именами не могут быть удвоены.

Как я могу это сделать? Я пробовал что-то вроде этого:

DELETE FROM p_users2 WHERE user_id IN 
(
select p.user_id from p_users p
join p_users2 p2 on p.username=p2.username
)

После этого я должен получить таблицу с уникальными именами пользователей, которую я хочу экспортировать и импортировать в первое. Но когда я выполняю свой запрос, я получаю сообщение об ошибке:

Ошибка SQL (1093): вы не можете указать целевую таблицу 'p_users2' для обновления в предложении FROM. (MYSQL)

Ответы [ 4 ]

3 голосов
/ 19 апреля 2010

Создайте новую таблицу, в которой имя пользователя уникально, затем выполните Игнорирование вставки ... см .:

Как объединить две таблицы MySQL?

1 голос
/ 19 апреля 2010

Делайте их как два отдельных утверждения.Сначала удалите дубликаты с помощью:

DELETE FROM p_users2 WHERE user_id IN 
(select p.user_id from p_users p)

Затем используйте команду INSERT with SELECT :

INSERT INTO P_USERS (FIELD1, FIELD2, FIELD3) SELECT FIELD1, FIELD2, FIELD3 FROM P_USERS2
0 голосов
/ 19 апреля 2010

вставлять только пользователей из второй таблицы, где в первой таблице нет подходящих учеников

INSERT INTO p_users
SELECT * FROM p_users2 p2
WHERE NOT EXISTS (
  SELECT * FROM p_users p1
  WHERE p1.id = p2.id
)
0 голосов
/ 19 апреля 2010

Попробуйте это

DELETE p2 FROM p_pusers2 AS P2
INNER JOIN p_users p1
ON p1.username=p2.username
...