一尘不染

如何通过加入选择进行更新

sql

如何更新子查询中也存在的表?我必须分两个阶段进行吗?(创建一个临时表-将选定的数据放入其中,然后更新最终表)

我正在尝试使用每个CTN的网络标签更新invoiceLine表。

最终结果将是:

  • invoiceLine
ctn       network
1234      network1
2345      network2
3456      network1

我有以下表格:

  • invoiceLine

    ctn network
    1234 null
    2345 null
    3456 null

  • terminal

    ctn network
    1234 1
    2345 2
    3456 1

  • network

    id label
    1 network1
    2 network2

我可以运行一个select,但是我不确定如何通过联接进行更新:

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’进行更新


阅读 130

收藏
2021-05-05

共1个答案

一尘不染

UPDATE invoiceLine
INNER JOIN terminal
ON invoiceLine.ctn = terminal.ctn
INNER JOIN network
ON terminal.network = network.id
SET invoiceLine.network = network.label

2021-05-05