2011-10-27 21 views
13

Alt sorguda bulunan bir tabloyu nasıl güncelleştirebilirim? 2 aşamada yapmak zorunda mıyım? (geçici bir tablo oluşturun - seçili verileri buraya yerleştirin ve son tabloyu güncelleştirin)Bir güncelleştirme ile seçme içinden geçiş yapma Bir

Her CTN için ağ etiketiyle invoiceLine tablosunu güncelleştirmeye çalışıyorum.

Nihai sonuç şöyle olacaktır:

  • invoiceLine

    ctn  network 
    1234  network1 
    2345  network2 
    3456  network1 
    

Aşağıdaki tablolar vardır:

  • invoiceLine

    ctn  network 
    1234  null 
    2345  null 
    3456  null 
    
  • terminali

    ctn  network 
    1234  1 
    2345  2 
    3456  1 
    
  • id  label 
    1   network1 
    2   network2 
    

bir seçme çalışabilir ama birlikte güncellemek için nasıl emin değilim bir katılmak:

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 

ama MySQL t Bir

Hata Kodu hrows: 1093 Sen from yan tümce

+0

Olası kopya halinde güncelleme için hedef tablo 'invoiceLine' belirleyemezsiniz [Nasıl GÜNCELLEME sorgusunda JOIN kullanmak ?] (http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query) –

cevap

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

Bir tedavi çalışır ... teşekkürler :-) - 6 dakika içinde cevabınızı kabul eder, ne zaman SO sağlar! – ManseUK

+0

çekicilik gibi çalışıyor, teşekkürler! –

+0

Ve WHERE ve LIMIT anahtar sözcükleri SET anahtar kelimesinden sonra gider. – mlg

3
UPDATE invoiceLine SET network = (
    SELECT label FROM network WHERE id = (
     SELECT network FROM terminal WHERE terminal.ctn = invoiceLine.ctn 
    ) 
) 
İlgili konular