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

byt*_*ift 14 mysql sql

我想知道是否可以将所有数据从表中的一列移动到另一个表.这是我正在尝试做的事情:

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

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

这些表之间的关系键是"user_id".

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

提前致谢.

Jac*_*cob 24

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;
Run Code Online (Sandbox Code Playgroud)

您可以JOINMySQL Update上使用语法.

  • 这不只是将表格行复制到新位置,但仍将前一列保留在同一个原始表格中吗? (2认同)

Mik*_*ike 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`);
Run Code Online (Sandbox Code Playgroud)

编辑

我假设你想要移动数据,就像'把它放在尚未存在的地方'.

EDIT2

以下是一份文档VALUES():http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_values


Nea*_*eal 5

由于标题是 SQL,而不是特定于 DB...对于那些在搜索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;
Run Code Online (Sandbox Code Playgroud)