2011-10-27 13 views
13

¿Cómo puedo actualizar una tabla que también está presente en una subconsulta? ¿Tengo que hacerlo en 2 etapas? (crear una tabla temporal - poner los datos seleccionados en él y luego actualizar la tabla final)Cómo actualizar desde seleccionar con unir

Estoy tratando de actualizar la tabla invoiceLine con la etiqueta de la red para cada CTN.

El resultado final sería:

  • invoiceLine

    ctn  network 
    1234  network1 
    2345  network2 
    3456  network1 
    

Tengo las siguientes tablas:

  • invoiceLine

    ctn  network 
    1234  null 
    2345  null 
    3456  null 
    
  • terminal de

    ctn  network 
    1234  1 
    2345  2 
    3456  1 
    
  • red

    id  label 
    1   network1 
    2   network2 
    

puedo correr un selecto pero no estoy seguro de cómo actualizar con una combinación:

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 

pero MySQL t hrows un Código

de error: 1093. No se puede especificar la tabla de destino 'invoiceLine' para la actualización en la cláusula DE

+0

duplicado posible de [Modo de empleo unirse a consulta UPDATE ?] (http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query) –

Respuesta

28
UPDATE invoiceLine 
    INNER JOIN terminal 
     ON invoiceLine.ctn = terminal.ctn 
    INNER JOIN network 
     ON terminal.network = network.id 
    SET invoiceLine.network = network.label 
+0

Funciona un placer ... gracias :-) - aceptará su respuesta en 6 minutos, cuando ¡Así que me deja! – ManseUK

+0

funciona como el encanto, gracias! –

+0

Y las palabras clave WHERE y LIMIT irían después de la palabra clave SET. – mlg

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