更新集=选择

Nag*_*hab 2 mysql

我正在尝试使用以下命令根据选择查询更新表:

UPDATE branches SET name = 
(SELECT CONCAT(comp.name," ",bra.subsurb) as newname 
FROM companies comp 
RIGHT JOIN branches bra 
ON comp.id = bra.company_id)
Run Code Online (Sandbox Code Playgroud)

根据这个问题,这应该有效,但这会产生错误:You can't specify target table 'branches' for update in FROM clause

不确定我做错了什么。

编辑:

最终这个查询做了我想要的事情:

UPDATE branches bra LEFT JOIN companies comp ON comp.id = bra.company_id SET bra.name = CONCAT(comp.name," ",bra.subsurb)

Ada*_*331 5

错误本身是非常不言自明的,您正在从正在更新的表中进行选择。相反,您可以JOIN在更新语句中使用。尝试这个:

UPDATE branches b
LEFT JOIN companies c ON c.id = b.company_id
SET b.name = CONCAT(c.name, " ", b.subsurb);
Run Code Online (Sandbox Code Playgroud)

请注意,由于您在此处使用左连接来选择所有分支机构,无论它们是否有公司,您可能会得到某些名称的空值,因此请小心。