如何更新子查询中也存在的表?我需要分2个阶段吗? (创建一个临时表 - 将所选数据放入其中,然后更新最终表)
我正在尝试使用每个CTN的网络标签更新invoiceLine表。
最终结果将是:
invoiceLine
ctn network
1234 network1
2345 network2
3456 network1
我有以下表格:
invoiceLine
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抛出了
错误代码:1093。您无法在FROM子句
中为更新指定目标表'invoiceLine'
答案 0 :(得分:31)
UPDATE invoiceLine
INNER JOIN terminal
ON invoiceLine.ctn = terminal.ctn
INNER JOIN network
ON terminal.network = network.id
SET invoiceLine.network = network.label
答案 1 :(得分:4)
UPDATE invoiceLine SET network = (
SELECT label FROM network WHERE id = (
SELECT network FROM terminal WHERE terminal.ctn = invoiceLine.ctn
)
)