SQL: переместить данные столбца в другую таблицу в том же отношении
Мне интересно, можно ли переместить все данные из одного столбца в таблицу в другую таблицу.
Вот что я пытаюсь сделать:
Таблица 1: пользователи - столбцы, пытающиеся прочитать + move = oauth_access_key и oauth_access_secret
Таблица 2: account_users - целевые столбцы: oauth_token_key, oauth_token_secret
Ключ отношения между этими таблицами - "user_id".
Возможно ли это в одном запросе? Я знаю, что это легко сделать на PHP, но мне интересно, можно ли это сделать в простом SQL.
Спасибо заранее.
Ответы
Ответ 1
UPDATE users, account_users
SET account_users.oauth_token_key=users.oauth_access_key,
account_users.oauth_token_secret = users.oauth_access_secret
WHERE account_users.user_id=users.user_id;
Синтаксис JOIN
можно использовать в Обновление MySQL.
Ответ 2
Я думаю, что ответ, который вы ищете,
INSERT INTO `account_users` (`user_id`, `oauth_token_key`, `oauth_token_secret`)
SELECT `user_id`, `oauth_access_key`, `oauth_access_secret` FROM `user`
ON DUPLICATE KEY UPDATE
`oauth_token_key` = VALUES(`oauth_token_key`),
`oauth_token_secret` = VALUES(`oauth_token_secret`);
ИЗМЕНИТЬ
Я предполагаю, что вы хотите перенести данные, как в "Поместить его где-то еще не было".
EDIT2
Вот документация на VALUES()
: http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_values
Ответ 3
Поскольку заголовок является SQL, а не специфичным для БД... здесь решение для тех, кто наткнется на это при поиске Postgres:
UPDATE account_users
SET oauth_token_key = users.oauth_access_key,
oauth_token_secret = users.oauth_access_secret
FROM profiles
WHERE account_users.user_id = users.user_id;
Ответ 4
INSERT INTO account_users (user_id, oauth_token_secret)
SELECT users.user_id, users.oauth_access_secret FROM users
ON DUPLICATE KEY UPDATE account_users.oauth_token_secret = users.oauth_access_secret