我有一个带有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行“
我错过了什么?
答案 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
)