MySQL перемещает данные из одной таблицы в другую, сопоставляя идентификаторы - PullRequest
2 голосов
/ 22 ноября 2011

У меня есть (a.o.) две таблицы MySQL с (a.o.) следующими столбцами:

tweets:
-------------------------------------
id text        from_user_id from_user
-------------------------------------
1  Cool tweet! 13295354     tradeny
2  Tweeeeeeeet 43232544     bolleke
3  Yet another 13295354     tradeny
4  Something.. 53546443     janusz4

users:
-------------------------------------
id from_user num_tweets from_user_id
-------------------------------------
1  tradeny   2235
2  bolleke   432
3  janusz4   5354

Теперь я хочу нормализовать таблицу твитов, заменив tweets.from_user на целое число, соответствующее users.id. Во-вторых, я хочу заполнить соответствующий user.from_user_id. Наконец, я хочу удалить tweets.from_user_id, чтобы конечный результат выглядел так:

tweets:
------------------------
id text        from_user
------------------------
1  Cool tweet!     1
2  Tweeeeeeeet     2
3  Yet another     1
4  Something..     3

users:
-------------------------------------
id from_user num_tweets from_user_id
-------------------------------------
1  tradeny   2235       13295354
2  bolleke   432        43232544
3  janusz4   5354       53546443

Мой вопрос заключается в том, может ли кто-нибудь помочь мне сформировать правильные запросы для этого. Я только зашел так далеко:

UPDATE tweets SET from_user =
  (SELECT id FROM users WHERE from_user = tweets.from_user)
WHERE...

UPDATE users SET from_user_id =
  (SELECT from_user_id FROM tweets WHERE from_user = tweets.from_user)
WHERE...

ALTER TABLE tweets DROP from_user_id

Любая помощь будет принята с благодарностью: -)

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Пример работы:

Tweet Table

http://data.stackexchange.com/stackoverflow/s/2144/mysql-move-data-from-one-table-to-another-matching-ids

Таблица пользователей

http://data.stackexchange.com/stackoverflow/qe/2145/mysql-move-data-from-one-table-to-another-matching-ids

UPDATE users
SET users.from_user_id = tweets.from_user_id
FROM users
LEFT JOIN tweets ON users.from_user = tweets.from_user;

UPDATE tweets
SET tweets.from_user = users.id
FROM tweets
LEFT JOIN users ON tweets.from_user = users.from_user;

ALTER TABLE tweets DROP COLUMN from_user_id;
ALTER TABLE tweets ALTER COLUMN from_user int;

Возможный запрос MySQL

НЕ ИСПЫТАНО

UPDATE users, tweets
SET users.from_user_id = tweets.from_user_id
WHERE users.from_user = tweets.from_user;

UPDATE tweets, users
SET tweets.from_user = users.id
WHERE tweets.from_user = users.from_user;

ALTER TABLE tweets DROP COLUMN from_user_id;
ALTER TABLE tweets CHANGE COLUMN from_user from_user int;
1 голос
/ 22 ноября 2011

Я думаю, что-то вроде этого должно работать:

UPDATE FROM tweets t 
LEFT JOIN users u ON u.from_user = t.from_user
SET t.from_user = u.id

UPDATE FROM users u
LEFT JOIN tweets t ON t.from_user = u.from_user
SET u.from_user_id = t.from_user_id

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