如何更新子查询中也存在的表?我必须分两个阶段进行吗? (创建一个临时表——将选中的数据放入其中,然后更新最终表)
我正在尝试使用每个 CTN 的网络标签更新 invoiceLine 表。
最终结果是:
发票行
ctn network 1234 network1 2345 network2 3456 network1
我有以下表格:
发票行
ctn network 1234 null 2345 null 3456 null
终端
ctn network 1234 1 2345 2 3456 1
网络
id label 1 network1 2 network2
我可以运行选择,但我不确定如何使用连接更新:
update invoiceLine
inner join terminal on terminal.ctn = invoiceLine.ctn
set invoiceLine.network =
(
select network.label
from invoiceLine
inner join terminal on terminal.ctn = invoiceLine.ctn
inner join network on network.id = terminal.network
)
where invoiceLine.ctn = terminal.ctn
但是 MySQL 抛出一个
Error Code: 1093. You can't specify target table 'invoiceLine' for update in FROM clause
最佳答案
UPDATE invoiceLine
INNER JOIN terminal
ON invoiceLine.ctn = terminal.ctn
INNER JOIN network
ON terminal.network = network.id
SET invoiceLine.network = network.label
关于mysql - 如何使用加入从选择中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7916186/