2012-06-29 2 views
0

다음 쿼리를 사용하여 테이블의 열을 업데이트하려고합니다. 이 경우 32000 행이 업데이트됩니다.두 SQL에서 결과가 달라지는 이유

Update Table72D012 t2 set DEFINING_ARGUMENT_ID = 
(
SELECT t3.ID 
FROM  Table70t3 t3, 
     Table70t1 t1, 
     Table70t0 t0,   
     Table4 t4 
WHERE t2.Model_id = t4.ID 
AND  t3.ID = t1.PARAM_VALUE_BPVA_ID 
AND  t3.VALUE_BPAR_ID = t0.ID 
AND  t0.KEY='SPECIAL_KEY' 
AND  t1.LANGUAGE='en' 
AND  t4.Model = t1.name 

); 

확인 결과를 원했고 관련 ID의 수를 얻기 위해 다음 쿼리를 사용했습니다. 나는 결과 26500을 얻었습니다. 왜 결과 (업데이트 횟수와 선택 결과 수)가 서로 다른가요?
어떻게 업데이트 쿼리를 수정할 수 있습니까?

이 만

SELECT t3.ID 
FROM  Table70t3 t3, 
     Table70t1 t1, 
     Table70t0 t0, 
     Table72D012 t2, 
     Table4 t4 
WHERE t2.Model_id = t4.ID 
AND  t3.ID = t1.PARAM_VALUE_BPVA_ID 
AND  t3.VALUE_BPAR_ID = t0.ID 
AND  t0.KEY='SPECIAL_KEY' 
AND  t1.LANGUAGE='en' 
AND  t4.Model = t1.name 
+0

한 쿼리에는't0.key = 'ORDN''이 있고 다른 쿼리에는't0.key ='SPECIAL_KEY''가 있습니까? –

+0

내가 누락 된 것이 있습니까? 업데이트 할 때't0.KEY = 'ORDN'을 사용하지만, 선택할 때't0.KEY = 'SPECIAL_KEY''를 사용합니까? – LittleBobbyTables

+0

두 입력 키가 모두 SPECIAL_KEY 인 입력 오류입니다. – Kayser

답변

3

첫 번째를 선택, 올바른 구문에 가입 배울 필요가있다. WHERE 절에서 조인을하는 것은 좋지 않은 생각입니다.

이유는 간단합니다. WHERE 절이나 다른 조건이 없으므로 첫 번째 쿼리는 테이블의 맨 아래 행을 업데이트하는 것입니다.

두 번째 쿼리는 쿼리와 일치하는 모든 행을 반환합니다. 업데이트 버전에서 해당 행은 NULL 값을 가져옵니다.

이 MS SQL에 의해하지만 DB2가 지원하는 좋은 구문입니다 :

이 같은 필요한 업데이트에 FROM 절, 그래서 내가 DB2가 허용 생각하지 않는다
Update Table72D012 t2 
    set DEFINING_ARGUMENT_ID = t3.ID 
    from (SELECT t4.id as t4_id, t3.ID 
      FROM Table70t3 t3 join 
       Table70t1 t1 
       on t3.ID = t1.PARAM_VALUE_BPVA_ID join 
       Table70t0 t0 
       on t3.VALUE_BPAR_ID = t0.ID join 
       Table4 t4 
       on t4.Model = t1.name 
      WHERE t0.KEY='SPECIAL_KEY' AND t1.LANGUAGE='en' 
     ) t 
    WHERE t2.Model_id = t4_ID 

:

Update Table72D012 t2 
    set DEFINING_ARGUMENT_ID = 
     (SELECT t3.ID 
      FROM Table70t3 t3 join 
       Table70t1 t1 
       on t3.ID = t1.PARAM_VALUE_BPVA_ID join 
       Table70t0 t0 
       on t3.VALUE_BPAR_ID = t0.ID join 
       Table4 t4 
       on t4.Model = t1.name 
      WHERE t0.KEY='SPECIAL_KEY' AND t1.LANGUAGE='en' and t2.Model_id = t4.ID 
     ) 
    WHERE exists    
     (SELECT t3.ID 
      FROM Table70t3 t3 join 
       Table70t1 t1 
       on t3.ID = t1.PARAM_VALUE_BPVA_ID join 
       Table70t0 t0 
       on t3.VALUE_BPAR_ID = t0.ID join 
       Table4 t4 
       on t4.Model = t1.name 
      WHERE t0.KEY='SPECIAL_KEY' AND t1.LANGUAGE='en' and t2.Model_id = t4.ID 
     ) 
+0

나는 그것을 놓쳤습니다. 좋은 분! –

+0

"극 줄"이란 무엇을 의미합니까? where 조건이 필요합니까 ?? 자동으로 인식하지 않습니까? – Kayser

+0

답해 주셔서 감사합니다. 업데이트 쿼리를 수정하려면 어떻게해야합니까? – Kayser

관련 문제