我有一个带有 select 语句的更新查询,它单独工作。它使用它来进行无效的更新。
update data set data.id = (select nid from node inner join data on node.title = data.name);
我收到错误
"You can't specify target table 'data' for update in FROM clause"
所以,经过深入研究,我发现我可以编写包含另一个选择语句:
update data set data.id = (select nid from(select nid from node inner join data on node.title = data.name) AS temptable);
我收到错误
"Subquery returns more than 1 row "
因此,经过更多挖掘,我添加了一个“ANY”,因为这是常见的建议:
update data set data.id = (select nid from ANY (select nid from node inner join data on node.title = data.name) AS temptable);
并得到
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(select nid from node inner join data on node.title = biblio_' at line 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
)
关于mysql:用子查询更新,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35023658/