Ответ 1
UPDATE invoiceLine
INNER JOIN terminal
ON invoiceLine.ctn = terminal.ctn
INNER JOIN network
ON terminal.network = network.id
SET invoiceLine.network = network.label
Как обновить таблицу, которая также присутствует в подзапросе? Должен ли я сделать это в 2 этапа? (создать временную таблицу - поместить в нее выбранные данные, а затем обновить финальную таблицу)
Я пытаюсь обновить таблицу invoiceLine ярлыком сети для каждого CTN.
Конечным результатом будет:
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. Вы не можете указать целевую таблицу 'invoiceLine' для обновления в предложении FROM
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
)
)