如何使用Join更新select

时间:2011-10-27 13:00:48

标签: mysql sql select join

如何更新子查询中也存在的表?我需要分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'

2 个答案:

答案 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
    )
)