Подтвердить что ты не робот

Как обновить с помощью select с помощью Join

Как обновить таблицу, которая также присутствует в подзапросе? Должен ли я сделать это в 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

4b9b3361

Ответ 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

UPDATE invoiceLine SET network = (
    SELECT label FROM network WHERE id = (
        SELECT network FROM terminal WHERE terminal.ctn = invoiceLine.ctn
    )
)