Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 使用同一表中另一行的数据更新一行_Mysql_Sql_Sql Update - Fatal编程技术网

Mysql 使用同一表中另一行的数据更新一行

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_

其思想是从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_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;