web-dev-qa-db-ja.com

結合を使用して選択から更新する方法

サブクエリにも存在するテーブルを更新するにはどうすればよいですか? 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
    

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」を指定できません。

16
Manse
UPDATE invoiceLine
    INNER JOIN terminal
        ON invoiceLine.ctn = terminal.ctn
    INNER JOIN network
        ON terminal.network = network.id
    SET invoiceLine.network = network.label
35
Joe Stefanelli
UPDATE invoiceLine SET network = (
    SELECT label FROM network WHERE id = (
        SELECT network FROM terminal WHERE terminal.ctn = invoiceLine.ctn
    )
)
5
Salman A