2017-09-05 4 views
0

이 UPDATE 문을 테스트하여 데이터베이스의 4 %, 8 % 및 9 % 부분을 모두 업데이트합니다. QTY_MULTIPLE 값을 레이어 별 CASES 값과 일치 시키려고합니다.EXISATE with EXISTS

은 그래서, REGEXP_LIKE는 결국 읽습니다 :

> Regexp_like (sp.part_no, '^4|^8|^9') 

그것은 내가 세 가지 특정 부분을 테스트하고있어 지금 당장 않기 때문에. 나는 진술의 나머지 부분이 그것이 예정되어있는 방식대로 작동하는지 확인하고 싶다.

는 여기에 내가 함께 테스트하고있는 무슨이다 :

UPDATE SALES_PART_TAB sp 
SET sp.qty_multiple = (SELECT cases_per_layer 
          FROM HH_INV_PART_CHARS 
          WHERE sp.part_no = HH_INV_PART_CHARS.part_no AND 
            sp.contract = HH_INV_PART_CHARS.contract) 
WHERE Regexp_like (sp.part_no, '^410-0017|^816-0210|^921-0003') AND 
     EXISTS 
     (SELECT sp.contract, 
     sp.part_no, 
     sp.qty_multiple, 
     HH_INV_PART_CHARS.cases_per_layer 
     FROM SALES_PART sp 
       inner join HH_INV_PART_CHARS 
         ON sp.part_no = HH_INV_PART_CHARS.part_no AND 
          sp.contract = HH_INV_PART_CHARS.contract 
     WHERE sp.qty_multiple != HH_INV_PART_CHARS.cases_per_layer); 

내가이 문을 실행

, 그것은 16 개 행을 업데이트합니다.

그러나 15 행을 업데이트 할 것으로 예상됩니다.

SELECT sp.contract, 
     sp.catalog_no, 
     sp.qty_multiple, 
     HH_INV_PART_CHARS.cases_per_layer 
FROM SALES_PART sp 
     inner join HH_INV_PART_CHARS 
       ON sp.part_no = HH_INV_PART_CHARS.part_no AND 
        sp.contract = HH_INV_PART_CHARS.contract 
WHERE sp.qty_multiple != HH_INV_PART_CHARS.cases_per_layer AND 
     Regexp_like (sp.part_no, '^410-0017|^816-0210|^921-0003') 

나는 UPDATE 문은 sales_part 테이블에서 part_no와 계약 HH_INV_PART_CHARS에있는 모든 행을 업데이트하고 난 데 문제가 생각 : 나는 다음과 같은 SELECT 문을 실행하여 이러한 결론에 도달했다. qty_multiple이 cases_per_layer와 같지 않은 부분에 대한 업데이트를 제한하지 않습니다 (이것이 내가 원하는 것입니다).

나는 지금 당황 스럽다. 나는 두 하위 쿼리 모두에서 작업을 시도했지만 문제가있는 위치를 확인하지 못했습니다.

+2

'update' 쿼리의'Regexp_like (sp.part_no, ...)'는'SALES_PART_TAB.spart_no'를 참조하고, 두 번째 쿼리는'SALES_PART.spart_no'를 참조합니다. 안개의 원인 중 하나는 동일한 쿼리에서 별칭'sp'를 다시 정의한다는 것입니다. 따라서'exists' 하위 쿼리는 업데이트되는 레코드와 아무런 관련이 없습니다. 이것은'exists' 조건을 버리면 여전히 16 개의 레코드를 업데이트한다는 것을 의미합니다. 이것이 당신이 원하는 것일 것 같지 않습니다. – trincot

+0

그랬습니다. 그 문제를 해결해 주셔서 감사합니다. – krebshack

+0

OK, 답으로 게시했습니다. – trincot

답변

3

업데이트 쿼리의 Regexp_like (sp.part_no,...)SALES_PART_TAB.spart_no이고 두 번째 쿼리는 SALES_PART.spart_no입니다.

안개의 원인 중 하나는 동일한 쿼리에서 sp이라는 별칭을 다시 정의하기 때문에 exists 하위 쿼리는 어떤 식 으로든 업데이트되는 레코드와 관련이 없습니다. 즉, exists 상태를 버리면 16 개의 레코드가 업데이트됩니다. 이것이 당신이 원하는 것일 것 같지 않습니다.

다른 별칭을 사용하면 참조 할 테이블을 구분할 수 있습니다.