2016-01-26 129 views
0

我有一个更新查询与select语句,单独工作。它正在使用它进行无法更新。mysql:更新子查询,

update data set data.id = (select nid from node inner join data on node.title = data.name); 

我得到

“你不能指定目标表‘数据’的更新在FROM子句”

所以,周围挖掘后,我发现我的错误可以编写包含另一个选择语句:

update data set data.id = (select nid from(select nid from node inner join data on node.title = data.name) AS temptable); 

我得到错误

更多挖后那么 “子查询返回多个1行”

,我添加了一个 “ANY”,因为这是常见的建议:

update data set data.id = (select nid from ANY (select nid from node inner join data on node.title = data.name) AS temptable); 

,并得到

“您的SQL语法有错误;检查 对应于你的MySQL服务器版本正确的语法使用 附近“(选择从节点内NID加入上node.title = biblio_数据”第1行“

我缺少的是手动?

回答

1

如果你想以更新data表中的所有行,你可以做这样的事情:

UPDATE data 
    LEFT 
    JOIN node 
    ON node.title = data.name 
    SET data.id = node.nid 

注:

如果在node中有多个行,其title的值与data中的name匹配的值相同,则不确定哪些行中将分配值为nid的那些行。

如果存在未在所述node表(在title列)发现在data表的name值,则一个NULL值将被分配给id柱。

查询的一些调整可以修改此行为。

可以使用子查询完成此操作,但我只是使用连接操作。我认为你可以使用相关的子查询,如下所示:

UPDATE data 
    SET data.id = (SELECT node.nid 
        FROM node 
        WHERE node.title = data.name 
        ORDER BY node.nid 
        LIMIT 1 
       )