我測試此UPDATE語句更新我們的數據庫中所有4%,8%和9%的部分。我試圖獲取QTY_MULTIPLE值來匹配每層的CASES值。更新與存在
所以,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語句:
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存在的所有行。它不限制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
好的,我發佈它作爲答案。 – trincot