이 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와 같지 않은 부분에 대한 업데이트를 제한하지 않습니다 (이것이 내가 원하는 것입니다).
나는 지금 당황 스럽다. 나는 두 하위 쿼리 모두에서 작업을 시도했지만 문제가있는 위치를 확인하지 못했습니다.
'update' 쿼리의'Regexp_like (sp.part_no, ...)'는'SALES_PART_TAB.spart_no'를 참조하고, 두 번째 쿼리는'SALES_PART.spart_no'를 참조합니다. 안개의 원인 중 하나는 동일한 쿼리에서 별칭'sp'를 다시 정의한다는 것입니다. 따라서'exists' 하위 쿼리는 업데이트되는 레코드와 아무런 관련이 없습니다. 이것은'exists' 조건을 버리면 여전히 16 개의 레코드를 업데이트한다는 것을 의미합니다. 이것이 당신이 원하는 것일 것 같지 않습니다. – trincot
그랬습니다. 그 문제를 해결해 주셔서 감사합니다. – krebshack
OK, 답으로 게시했습니다. – trincot