How to update from select with a Join(如何使用加入从选择中更新)
问题描述
如何更新子查询中也存在的表?我必须分2个阶段完成吗?(创建一个临时表 - 将选定的数据放入其中,然后更新最终表)
How can I update a table that is also present in a subquery? Do I have to do it in 2 stages? (create a temporary table - put the selected data in it and then update the final table)
我正在尝试使用每个 CTN 的网络标签更新 invoiceLine 表.
I am trying to update the invoiceLine table with the label of the network for each CTN.
最终结果是:
发票行
ctn network
1234 network1
2345 network2
3456 network1
我有以下表格:
发票行
ctn network
1234 null
2345 null
3456 null
终端
terminal
ctn network
1234 1
2345 2
3456 1
网络
network
id label
1 network1
2 network2
我可以运行一个选择,但我不确定如何使用连接进行更新:
I can run a select but I'm not sure how to update with a join:
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 抛出了一个
but MySQL throws a
错误代码:1093.您不能在 FROM 子句中指定目标表 'invoiceLine' 进行更新
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
这篇关于如何使用加入从选择中更新的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何使用加入从选择中更新


基础教程推荐
- ORA-01830:日期格式图片在转换整个输入字符串之前结束/选择日期查询的总和 2021-01-01
- MySQL根据从其他列分组的值,对两列之间的值进行求和 2022-01-01
- CHECKSUM 和 CHECKSUM_AGG:算法是什么? 2021-01-01
- while 在触发器内循环以遍历 sql 中表的所有列 2022-01-01
- 从字符串 TSQL 中获取数字 2021-01-01
- 带更新的 sqlite CTE 2022-01-01
- MySQL 5.7参照时间戳生成日期列 2022-01-01
- 如何在 CakePHP 3 中实现 INSERT ON DUPLICATE KEY UPDATE aka upsert? 2021-01-01
- 使用 VBS 和注册表来确定安装了哪个版本和 32 位 2021-01-01
- 带有WHERE子句的LAG()函数 2022-01-01