SQL: переместить данные столбца в другую таблицу в том же отношении - PullRequest
14 голосов
/ 28 июля 2011

Мне интересно, возможно ли переместить все данные из одного столбца в таблице в другую. Вот что я пытаюсь сделать:

Таблица 1: пользователи - столбцы, пытающиеся прочитать + move = oauth_access_key и oauth_access_secret

Таблица 2: account_users - целевые столбцы: oauth_token_key, oauth_token_secret

Ключ отношения между этими таблицами - "user_id".

Возможно ли это в одном запросе? Я знаю, что это легко сделать в PHP, но мне интересно, можно ли это сделать простым SQL.

Заранее спасибо.

Ответы [ 4 ]

23 голосов
/ 28 июля 2011
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 Update .

6 голосов
/ 28 июля 2011

Я думаю, что вы ищете ответ

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`);

EDIT

Я предполагаю, что вы хотите переместить данные, как в «положить их туда, где их еще не было».

EDIT2

Вот документация по VALUES(): http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_values

3 голосов
/ 13 июня 2013

Поскольку заголовок 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;
0 голосов
/ 28 июля 2011
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...