2017-10-17 8 views
0

하위 쿼리 선택 문을 사용하여 다른 테이블에서 찾은 새 값으로 모든 레코드를 업데이트하려면 Sqlite UPDATE 명령을 가져 오는 데 어려움을 겪고 있습니다. Table1 열의 모든 열을 Table2 열에서 첫 번째 값으로 잘못 업데이트합니다. 쿼리의 선택 부분 만 실행하면 올바르게 실행되고 모든 적절한 값이 반환됩니다. 기본적으로 Adjustment라는 조회 테이블에서 300000의 배수로 가장 가까운 값을 찾습니다.선택 하위 쿼리 만 Sqlite 업데이트 첫 번째 값을 chosing

코드 :

Update TEMP1 
    set New_position = 
    (
     select (Temp1.Col1 + Adjustment.Offset) as NewValue 
     from Adjustment, TEMP1 
     where Adjustment.LookupValue = cast(TEMP1.Col1/300000 as Int) * 300000 
    ) 

답변

0

당신은 correlated subquery 사용하려는 : 하나 스칼라 하위 쿼리로 또는 IN의 오른쪽 피연산자로 사용

SELECT 문, NOT IN 또는 EXISTS 표현식은 외부 조회의 열에 대한 참조를 포함 할 수 있습니다. 이러한 부속 조회는 상관 부속 조회라고합니다. 상관 하위 쿼리는 결과가 필요할 때마다 재평가됩니다. 상관되지 않은 부속 조회는 한 번만 평가되고 필요에 따라 결과가 재사용됩니다.

그러나 하위 쿼리에는 실제로 외부 쿼리의 열에 대한 참조가 포함되어 있지 않습니다. 내부 쿼리의 FROM Temp1Temp1 테이블의 새 인스턴스이고 Temp1.Col1은이를 참조합니다. Temp1.Col1의 값은 임의의 행의 Temp1에 있습니다.

그냥 FROM 절에서 Temp1 드롭 :

UPDATE Temp1 
SET New_position = (SELECT Temp1.Col1 + Adjustment.Offset 
        FROM Adjustment 
        WHERE LookupValue = CAST(Temp1.Col1/300000 AS INT) * 300000); 
+0

놀라운! 그랬어. 정말 고맙습니다 – DaveP