2011-10-27 3 views
13

하위 쿼리에도있는 테이블을 업데이트하려면 어떻게해야합니까? 2 단계로해야합니까? (임시 테이블 만들기 - 선택한 데이터를 넣은 다음 최종 테이블을 업데이트하십시오)참여가있는 select에서 업데이트하는 방법

각 CTN에 대한 네트워크 레이블로 invoiceLine 테이블을 업데이트하려고합니다.

최종 결과는 다음과 같습니다

  • invoiceLine

    ctn  network 
    1234  network1 
    2345  network2 
    3456  network1 
    

나는 다음과 같은 테이블이 있습니다

  • invoiceLine

    을 617,451,515,
    ctn  network 
    1234  null 
    2345  null 
    3456  null 
    
  • 터미널

    ctn  network 
    1234  1 
    2345  2 
    3456  1 
    
  • 네트워크

    id  label 
    1   network1 
    2   network2 
    

나는 선택을 실행할 수 있지만이로 업데이트하는 방법을 잘 모르겠어요 조인 :

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 t

오류 코드가 hrows : 1093 당신의 FROM 절에서

+0

가능한 중복 업데이트 대상 테이블 'invoiceLine'를 지정할 수 없습니다 [어떻게 UPDATE 쿼리에서 조인을 사용하는 ?] (http://stackoverflow.com/questions/15209414/how-to-use-join-in-update-query) –

답변

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

치료 ... 고마워요 :-) - 6 분 안에 답을 수락합니다. 그래서 나를시켜! – ManseUK

+0

님, 감사합니다. –

+0

WHERE 및 LIMIT 키워드는 SET 키워드 다음에 올 것입니다. – mlg

3
UPDATE invoiceLine SET network = (
    SELECT label FROM network WHERE id = (
     SELECT network FROM terminal WHERE terminal.ctn = invoiceLine.ctn 
    ) 
) 
관련 문제