mysql:使用子查询进行更新,

时间:2016-01-26 20:48:14

标签: mysql sql-update inner-join

我有一个带有select语句的更新查询,该语句单独工作。它正在使用它来进行无效的更新。

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

我收到错误

  

“您无法在FROM子句”

中为更新指定目标表'数据'

所以,在挖掘之后,我发现我可以编写包含另一个select语句:

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

我收到错误

  

“子查询返回超过1行”

因此,经过更多的挖掘,我添加了一个“任何”,因为这是一个共同的建议:

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服务器版本,以便使用正确的语法   '附近'(从node.title = biblio_'上的节点内连接数据中选择nid)   在第1行“

我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果要更新data表中的所有行,可以执行以下操作:

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

注意:

如果node中有多个行title的值相同,且与name中的data匹配,那么这些行中的哪一行不确定nid的值将从。

中分配

如果name表中data的值在node表中找不到(在title列中),则NULL值将为已分配到id列。

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

使用子查询可以实现这一点,但我只会使用连接操作。我认为你可以使用相关的子查询,如下所示:

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