SQL:以相同的关系将列数据移动到其他表

时间:2011-07-28 09:34:20

标签: mysql sql

我想知道是否可以将所有数据从表中的一列移动到另一个表。 这就是我想要做的事情:

表1:用户 - 试图读取的列+ move = oauth_access_key和oauth_access_secret

表2:account_users - 目标列:oauth_token_key,oauth_token_secret

这些表之间的关系键是“user_id”。

这可以在一个查询中使用吗?我知道这很容易在PHP中完成,但我想知道是否可以在纯SQL中完成。

提前致谢。

4 个答案:

答案 0 :(得分:23)

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;

您可以在MySQL Update上使用JOIN语法。

答案 1 :(得分:6)

我认为您正在寻找的答案是

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

的文档

答案 2 :(得分: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;

答案 3 :(得分:0)

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