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