2014-02-12 3 views
0

데이터베이스에 나는 많은 정보를 가진 테이블을 가지고 있습니다. 내가하려고하는 것은 숫자와 숫자가 같은 곳에 한도를 정한다. 나는 옳은 길에 있다고 생각하지만 뭔가를 놓치고 있습니다. 누구나 아이디어가 있으십니까?복수 행을 업데이트 중

UPDATE loc l 
SET l.limit = (SELECT (lo.factor*j.limit) 
       FROM (SELECT limit, num, fig FROM loc WHERE typ = 'WE') j, loc lo 
       WHERE lo.typ = 'TR' 
       AND lo.num = j.num  
       AND lo.fig = j.fig) 
WHERE l.typ = 'WE' 
+0

서브 쿼리 대신에 조인을 사용합니다. –

+0

조인을 잘하지 못했습니다. – Demas

답변

0

join으로 원하는 것을 할 수 있습니다. 하지만 상관 관계가있는 하위 쿼리 접근법을 사용하고 있습니다.

하위 쿼리가 외부 쿼리와 상관 관계가 없다는 것이 문제라고 생각됩니다. 당신은 하위 쿼리에 loc 테이블을 제거해야합니다 또한

UPDATE loc l 
    SET l.`limit` = (SELECT (lo.factor*j.`limit`) 
        FROM (SELECT `limit`, num, fig 
         FROM loc 
         WHERE typ = 'WE' 
         ) j 
        WHERE l.typ = 'TR' AND 
         l.num = j.num AND 
         l.fig = j.fig 
       ) 
    WHERE l.typ = 'WE'; 

limit가 예약 된 단어입니다. 열 이름으로 사용해서는 안됩니다. 너는 그렇기 때문에 그것을 역 따옴표 나 큰 따옴표로 묶어야한다.

+0

감사하지만 한도는 테이블의 이름이 아니고, 저의 선택 이었지만,이 시도는했지만 누락 된 표현 오류가납니다. – Demas

+0

아니요. 틀렸어. '대신'을 썼다. 오류가 나에게 나왔다. – Demas

관련 문제