Mysql 使用同一表中另一行的数据更新一行
其思想是从id=27的用户表中选择数据,并更新id=26的同一个表 我有以下错误:Mysql 使用同一表中另一行的数据更新一行,mysql,sql,sql-update,Mysql,Sql,Sql Update,其思想是从id=27的用户表中选择数据,并更新id=26的同一个表 我有以下错误: UPDATE user SET tw_oauth_token=(SELECT tw_oauth_token FROM user WHERE id=27), tw_oauth_token_secret = (SELECT tw_oauth_token_secret FROM user WHERE id=27), tw_
UPDATE user SET
tw_oauth_token=(SELECT tw_oauth_token FROM user WHERE id=27),
tw_oauth_token_secret = (SELECT tw_oauth_token_secret FROM user WHERE id=27),
tw_user_id = (SELECT tw_user_id FROM user WHERE id=27),
handler = (SELECT handler FROM user WHERE id=27),
merged=1 WHERE id=26
任何帮助都将不胜感激。谢谢为什么不尝试基于您的表创建一个虚拟表,然后在该视图上使用SELECT语句更新用户表呢。大概是这样的:
#1093 - You can't specify target table 'user' for update in FROM clause
UPDATE user a
CROSS JOIN user b
SET a.tw_oauth_token = b.tw_oauth_token,
a.tw_oauth_token_secret = b.tw_oauth_token_secret,
a.tw_user_id = b.tw_user_id,
a.handler = b.handler,
a.mrged = 1
WHERE a.ID = 26 AND
b.ID = 27
然后在更新中使用view_用户。谷歌上的第一个结果,第一个相关链接:我不明白为什么这是交叉连接而不是自然连接或内部连接;看起来最突出的部分是,它是一个自连接用户,作为一个连接到用户,作为b-但作为语法糖被忽略了。就我个人而言,我更喜欢看到AS关键字,尤其是在讨论和文档中。@JimDennis您不能在这里使用内部联接,因为您无法确定记录的联接位置。上面的语句是这样的:@JimDennis是使用自然连接的结果,它不能提供正确的数据。@JimDennis最后,我不喜欢自己使用,因为它是可选的。感谢SQLFIDLE链接。我真的需要开始使用它。
CREATE VIEW view_user AS
SELECT *
FROM user;