サブクエリにも存在するテーブルを更新するにはどうすればよいですか? 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」を指定できません。
UPDATE invoiceLine
INNER JOIN terminal
ON invoiceLine.ctn = terminal.ctn
INNER JOIN network
ON terminal.network = network.id
SET invoiceLine.network = network.label
UPDATE invoiceLine SET network = (
SELECT label FROM network WHERE id = (
SELECT network FROM terminal WHERE terminal.ctn = invoiceLine.ctn
)
)